{
  "contractName": "Identity",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "initialManagementKey",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_isLibrary",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "executionId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "Approved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "claimId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "topic",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "scheme",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "issuer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "uri",
          "type": "string"
        }
      ],
      "name": "ClaimAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "claimId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "topic",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "scheme",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "issuer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "uri",
          "type": "string"
        }
      ],
      "name": "ClaimChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "claimId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "topic",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "scheme",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "issuer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "uri",
          "type": "string"
        }
      ],
      "name": "ClaimRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "claimRequestId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "topic",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "scheme",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "issuer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "uri",
          "type": "string"
        }
      ],
      "name": "ClaimRequested",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "executionId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "Executed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "executionId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "ExecutionFailed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "executionId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "ExecutionRequested",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "key",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "purpose",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "keyType",
          "type": "uint256"
        }
      ],
      "name": "KeyAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "key",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "purpose",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "keyType",
          "type": "uint256"
        }
      ],
      "name": "KeyRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "purpose",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "number",
          "type": "uint256"
        }
      ],
      "name": "KeysRequiredChanged",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "initialManagementKey",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_key",
          "type": "bytes32"
        }
      ],
      "name": "getKey",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "purposes",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256",
          "name": "keyType",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "key",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_key",
          "type": "bytes32"
        }
      ],
      "name": "getKeyPurposes",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "_purposes",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_purpose",
          "type": "uint256"
        }
      ],
      "name": "getKeysByPurpose",
      "outputs": [
        {
          "internalType": "bytes32[]",
          "name": "_keys",
          "type": "bytes32[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_key",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_purpose",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_type",
          "type": "uint256"
        }
      ],
      "name": "addKey",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_id",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "_approve",
          "type": "bool"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "execute",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "executionId",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_key",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_purpose",
          "type": "uint256"
        }
      ],
      "name": "removeKey",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_key",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_purpose",
          "type": "uint256"
        }
      ],
      "name": "keyHasPurpose",
      "outputs": [
        {
          "internalType": "bool",
          "name": "result",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_topic",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_scheme",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_issuer",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_signature",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        },
        {
          "internalType": "string",
          "name": "_uri",
          "type": "string"
        }
      ],
      "name": "addClaim",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "claimRequestId",
          "type": "bytes32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_claimId",
          "type": "bytes32"
        }
      ],
      "name": "removeClaim",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_claimId",
          "type": "bytes32"
        }
      ],
      "name": "getClaim",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "topic",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "scheme",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "issuer",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "internalType": "string",
          "name": "uri",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_topic",
          "type": "uint256"
        }
      ],
      "name": "getClaimIdsByTopic",
      "outputs": [
        {
          "internalType": "bytes32[]",
          "name": "claimIds",
          "type": "bytes32[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManagementKey\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_isLibrary\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"executionId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"Approved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"topic\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"scheme\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"issuer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"uri\",\"type\":\"string\"}],\"name\":\"ClaimAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"topic\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"scheme\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"issuer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"uri\",\"type\":\"string\"}],\"name\":\"ClaimChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"topic\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"scheme\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"issuer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"uri\",\"type\":\"string\"}],\"name\":\"ClaimRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"claimRequestId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"topic\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"scheme\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"issuer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"uri\",\"type\":\"string\"}],\"name\":\"ClaimRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"executionId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"Executed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"executionId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ExecutionFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"executionId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ExecutionRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"purpose\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"keyType\",\"type\":\"uint256\"}],\"name\":\"KeyAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"purpose\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"keyType\",\"type\":\"uint256\"}],\"name\":\"KeyRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"purpose\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"name\":\"KeysRequiredChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_topic\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scheme\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_issuer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_uri\",\"type\":\"string\"}],\"name\":\"addClaim\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"claimRequestId\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_purpose\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_type\",\"type\":\"uint256\"}],\"name\":\"addKey\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_approve\",\"type\":\"bool\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"executionId\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_claimId\",\"type\":\"bytes32\"}],\"name\":\"getClaim\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"topic\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"scheme\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"issuer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"uri\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_topic\",\"type\":\"uint256\"}],\"name\":\"getClaimIdsByTopic\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"claimIds\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"}],\"name\":\"getKey\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"purposes\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"keyType\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"}],\"name\":\"getKeyPurposes\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"_purposes\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_purpose\",\"type\":\"uint256\"}],\"name\":\"getKeysByPurpose\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"_keys\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManagementKey\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_purpose\",\"type\":\"uint256\"}],\"name\":\"keyHasPurpose\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_claimId\",\"type\":\"bytes32\"}],\"name\":\"removeClaim\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_purpose\",\"type\":\"uint256\"}],\"name\":\"removeKey\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the `IERC734` \\\"KeyHolder\\\" and the `IERC735` \\\"ClaimHolder\\\" interfaces into a common Identity Contract. This implementation has a separate contract were it declares all storage, allowing for it to be used as an upgradable logic contract.\",\"kind\":\"dev\",\"methods\":{\"addClaim(uint256,uint256,address,bytes,bytes,string)\":{\"params\":{\"_data\":\"The hash of the claim data, sitting in another location, a bit-mask, call data, or actual data based on the claim scheme.\",\"_issuer\":\"The issuers identity contract address, or the address used to sign the above signature.\",\"_scheme\":\"The scheme with which this claim SHOULD be verified or how it should be processed.\",\"_signature\":\"Signature which is the proof that the claim issuer issued a claim of topic for this identity. it MUST be a signed message of the following structure: keccak256(abi.encode(address identityHolder_address, uint256 _ topic, bytes data))\",\"_topic\":\"The type of claim\",\"_uri\":\"The location of the claim, this can be HTTP links, swarm hashes, IPFS hashes, and such.\"},\"returns\":{\"claimRequestId\":\"Returns claimRequestId: COULD be send to the approve function, to approve or reject this claim. triggers ClaimAdded event.\"}},\"addKey(bytes32,uint256,uint256)\":{\"params\":{\"_key\":\"keccak256 representation of an ethereum address\",\"_purpose\":\"a uint256[] Array of the key types, like 1 = MANAGEMENT, 2 = ACTION, 3 = CLAIM, 4 = ENCRYPTION\",\"_type\":\"type of key used, which would be a uint256 for different key types. e.g. 1 = ECDSA, 2 = RSA, etc.\"},\"returns\":{\"success\":\"Returns TRUE if the addition was successful and FALSE if not\"}},\"execute(address,uint256,bytes)\":{\"returns\":{\"executionId\":\"SHOULD be sent to the approve function, to approve or reject this execution.\"}},\"getClaim(bytes32)\":{\"params\":{\"_claimId\":\"The identity of the claim i.e. keccak256(abi.encode(_issuer, _topic))\"},\"returns\":{\"data\":\"Returns all the parameters of the claim for the specified _claimId (topic, scheme, signature, issuer, data, uri) .\",\"issuer\":\"Returns all the parameters of the claim for the specified _claimId (topic, scheme, signature, issuer, data, uri) .\",\"scheme\":\"Returns all the parameters of the claim for the specified _claimId (topic, scheme, signature, issuer, data, uri) .\",\"signature\":\"Returns all the parameters of the claim for the specified _claimId (topic, scheme, signature, issuer, data, uri) .\",\"topic\":\"Returns all the parameters of the claim for the specified _claimId (topic, scheme, signature, issuer, data, uri) .\",\"uri\":\"Returns all the parameters of the claim for the specified _claimId (topic, scheme, signature, issuer, data, uri) .\"}},\"getClaimIdsByTopic(uint256)\":{\"params\":{\"_topic\":\"The identity of the claim i.e. keccak256(abi.encode(_issuer, _topic))\"},\"returns\":{\"claimIds\":\"Returns an array of claim IDs by topic.\"}},\"getKey(bytes32)\":{\"params\":{\"_key\":\"The public key.  for non-hex and long keys, its the Keccak256 hash of the key\"},\"returns\":{\"key\":\"Returns the full key data, if present in the identity.\",\"keyType\":\"Returns the full key data, if present in the identity.\",\"purposes\":\"Returns the full key data, if present in the identity.\"}},\"getKeyPurposes(bytes32)\":{\"params\":{\"_key\":\"The public key.  for non-hex and long keys, its the Keccak256 hash of the key\"},\"returns\":{\"_purposes\":\"Returns the purposes of the specified key\"}},\"getKeysByPurpose(uint256)\":{\"params\":{\"_purpose\":\"a uint256[] Array of the key types, like 1 = MANAGEMENT, 2 = ACTION, 3 = CLAIM, 4 = ENCRYPTION\"},\"returns\":{\"_keys\":\"Returns an array of public key bytes32 hold by this identity and having the specified purpose\"}},\"initialize(address)\":{\"params\":{\"initialManagementKey\":\"The ethereum address to be set as the management key of the ONCHAINID.\"}},\"removeClaim(bytes32)\":{\"params\":{\"_claimId\":\"The identity of the claim i.e. keccak256(abi.encode(_issuer, _topic))\"},\"returns\":{\"success\":\"Returns TRUE when the claim was removed. triggers ClaimRemoved event\"}},\"version()\":{\"details\":\"Returns the string of the current version.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addClaim(uint256,uint256,address,bytes,bytes,string)\":{\"notice\":\"Implementation of the addClaim function from the ERC-735 standard  Require that the msg.sender has claim signer key.\"},\"addKey(bytes32,uint256,uint256)\":{\"notice\":\"implementation of the addKey function of the ERC-734 standard Adds a _key to the identity. The _purpose specifies the purpose of key. Initially we propose four purposes: 1: MANAGEMENT keys, which can manage the identity 2: ACTION keys, which perform actions in this identities name (signing, logins, transactions, etc.) 3: CLAIM signer keys, used to sign claims on other identities which need to be revokable. 4: ENCRYPTION keys, used to encrypt data e.g. hold in claims. MUST only be done by keys of purpose 1, or the identity itself. If its the identity itself, the approval process will determine its approval.\"},\"approve(uint256,bool)\":{\"notice\":\"Approves an execution or claim addition. This SHOULD require n of m approvals of keys purpose 1, if the _to of the execution is the identity contract itself, to successfully approve an execution. And COULD require n of m approvals of keys purpose 2, if the _to of the execution is another contract, to successfully approve an execution.\"},\"execute(address,uint256,bytes)\":{\"notice\":\"Passes an execution instruction to the keymanager. SHOULD require approve to be called with one or more keys of purpose 1 or 2 to approve this execution. Execute COULD be used as the only accessor for addKey, removeKey and replaceKey and removeClaim.\"},\"getClaim(bytes32)\":{\"notice\":\"Implementation of the getClaim function from the ERC-735 standard.\"},\"getClaimIdsByTopic(uint256)\":{\"notice\":\"Implementation of the getClaimIdsByTopic function from the ERC-735 standard. used to get all the claims from the specified topic\"},\"getKey(bytes32)\":{\"notice\":\"Implementation of the getKey function from the ERC-734 standard\"},\"getKeyPurposes(bytes32)\":{\"notice\":\"gets the purposes of a key\"},\"getKeysByPurpose(uint256)\":{\"notice\":\"gets all the keys with a specific purpose from an identity\"},\"initialize(address)\":{\"notice\":\"When using this contract as an implementation for a proxy, call this initializer with a delegatecall.\"},\"keyHasPurpose(bytes32,uint256)\":{\"notice\":\"Returns true if the key has MANAGEMENT purpose or the specified purpose.\"},\"removeClaim(bytes32)\":{\"notice\":\"Implementation of the removeClaim function from the ERC-735 standard Require that the msg.sender has management key. Can only be removed by the claim issuer, or the claim holder itself.\"},\"removeKey(bytes32,uint256)\":{\"notice\":\"Remove the purpose from a key.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@onchain-id/solidity/contracts/Identity.sol\":\"Identity\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10},\"remappings\":[]},\"sources\":{\"@onchain-id/solidity/contracts/Identity.sol\":{\"keccak256\":\"0xb7a32a84e675769c5f3d5d20ec29db72f1edb6ceae75cf75f1ac026240d1aabb\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://b69b1b493d497697a357f9887576e9ea8331dd452283b14c0ff1cd0e79f46e67\",\"dweb:/ipfs/QmXrZAHgvokKrjXcru1CWkA1nRdR6Cx8oe9Yg55aDr5dkw\"]},\"@onchain-id/solidity/contracts/interface/IERC734.sol\":{\"keccak256\":\"0x3302de9e9fe7a548cb7395b6fda38f952f6a6d1c599dfeee181a1ef80741fc1d\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://fc9f00e5b2f1523fecf52b1a833e9263a53edbebb7d1458f9004cfd41dd0402e\",\"dweb:/ipfs/QmWcNcVQrg66KeQz39jPgJun7jF3CbdJKHQa19q97n5Hzb\"]},\"@onchain-id/solidity/contracts/interface/IERC735.sol\":{\"keccak256\":\"0x3b77ce6012a96cf0075197cdeb1b98b66ca1722ef23241e40ba6185f03bf4584\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://766e139f0c3cc0c6489561e75df0d8eab8c277f90009e4fa19add4f22bb40d82\",\"dweb:/ipfs/QmcbAReZn9nLcnYn9AHiDmcYJ42JqAU5QSy4dKhUcJUnjy\"]},\"@onchain-id/solidity/contracts/interface/IIdentity.sol\":{\"keccak256\":\"0xdcefbe2a850f9f43e959b9f7ed93fd5b35f29ff3dfbfaac7530af737c9eba7c6\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://2e887c7cc67fdb2710c48bed22dbb27880f6dfb84ee93178ad4fcd659099cb96\",\"dweb:/ipfs/QmUuDEsZJC7uQQEErmuNJzePsNgHiTDdS2TuMzG1GRqrC3\"]},\"@onchain-id/solidity/contracts/storage/Storage.sol\":{\"keccak256\":\"0x44c57bea4b4904ef4cffd2658add38b550ddaf8d756f4915b9e62ec5fe0f8c99\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://23d4a3ce1ff09db584522cb4873b7b8d0d248706641f86fd86cef9458c207708\",\"dweb:/ipfs/QmaDBSYFvztY31ZWs4UsAEyVpbKQ1ok6GA3o8bMJUyZGsW\"]},\"@onchain-id/solidity/contracts/storage/Structs.sol\":{\"keccak256\":\"0xcf99abc76909c43388a5faa1493970dfe54d647dd95ee1fb9ef3682b095e0f61\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://02eb7e1a9b4931503fc304bf5564a75d872b8b7e5a661d7b458ba0a1c96e6d6c\",\"dweb:/ipfs/QmSqhvCHTABCDhVPN8wX1HwkvWLeNYSa1dKa2xt4F7qbD1\"]},\"@onchain-id/solidity/contracts/version/Version.sol\":{\"keccak256\":\"0x6fb49164a0fa97b52a8f335dd7b7cdf575ebb16962a764033bd7be2e39f296b8\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://7ba47d9ceface848db9145fba6c77f782f5b73fb5c7a753a14e4f8d8943c5f6f\",\"dweb:/ipfs/QmXyXA9LAGdpN3BEHWSCXhgVdFdWTbvizZxgg8BrRsdYAk\"]}},\"version\":1}",
  "bytecode": "0x60806040526006805461ffff19166101001790553480156200002057600080fd5b506040516200248538038062002485833981016040819052620000439162000268565b6006805461ff0019168215610100908102919091179182905560ff91041615620000785762000072826200008e565b62000086565b6006805460ff191660011790555b5050620002b6565b60065460ff161580620000a05750303b155b620000f15760405162461bcd60e51b815260206004820152601e60248201527f496e697469616c206b65792077617320616c72656164792073657475702e0000604482015260640160405180910390fd5b6006805461ffff1916610101179055604080516001600160a01b03831660208201526000910160408051601f198184030181528282528051602091820120600081815260018084528482206002810184905586850190955280865290829052918290529350620001629290620001fc565b506000818152600160208181526040808420830183905560029091527fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0805480840182559084527f7fef4bf8f63cf9dd467136c679c02b5c17fcf6322d9562512bf5eb952cf7cc5301849055519091829184917f480000bb1edad8ca1470381cc334b1917fbd51c6531f3a623ea8e0ec7e38a6e991a45050565b8280548282559060005260206000209081019282156200023f579160200282015b828111156200023f578251829060ff169055916020019190600101906200021d565b506200024d92915062000251565b5090565b5b808211156200024d576000815560010162000252565b600080604083850312156200027c57600080fd5b82516001600160a01b03811681146200029457600080fd5b60208401519092508015158114620002ab57600080fd5b809150509250929050565b6121bf80620002c66000396000f3fe6080604052600436106100ad5760003560e01c806312aaac70146100b25780631d381240146100ea5780634eee424a1461011a57806353d413c51461013a57806354fd4d501461015a578063747442d31461018e57806380e9e9e1146101ae5780639010f726146101db578063b1a34e0d146101fb578063b61d27f614610229578063c4d66de81461023c578063c9100bcb1461025e578063d202158d14610290578063fb307b34146102b0575b600080fd5b3480156100be57600080fd5b506100d26100cd366004611947565b6102dd565b6040516100e19392919061199b565b60405180910390f35b3480156100f657600080fd5b5061010a6101053660046119c0565b610356565b60405190151581526020016100e1565b34801561012657600080fd5b5061010a610135366004611947565b610567565b34801561014657600080fd5b5061010a6101553660046119ec565b610873565b34801561016657600080fd5b5060408051808201825260058152640312e342e360dc1b602082015290516100e19190611a5e565b34801561019a57600080fd5b5061010a6101a9366004611a78565b610c08565b3480156101ba57600080fd5b506101ce6101c9366004611947565b610eae565b6040516100e19190611aad565b3480156101e757600080fd5b506101ce6101f6366004611947565b610f10565b34801561020757600080fd5b5061021b610216366004611bb3565b610f70565b6040519081526020016100e1565b61021b610237366004611c71565b611222565b34801561024857600080fd5b5061025c610257366004611cc7565b611390565b005b34801561026a57600080fd5b5061027e610279366004611947565b61139c565b6040516100e196959493929190611ce2565b34801561029c57600080fd5b5061010a6102ab3660046119ec565b61159d565b3480156102bc57600080fd5b506102d06102cb366004611947565b61169e565b6040516100e19190611d42565b60008181526001602081815260408084209283015460028401548454835181860281018601909452808452606096958695909491859183018282801561034257602002820191906000526020600020905b81548152602001906001019080831161032e575b505050505092509250925092509193909250565b60065460009060ff61010090910416151560011461038f5760405162461bcd60e51b815260040161038690611d55565b60405180910390fd5b3330146103e3576103c7336040516020016103aa9190611da8565b60405160208183030381529060405280519060200120600161159d565b6103e35760405162461bcd60e51b815260040161038690611dbc565b6000848152600160205260409020600201548490036104d45760005b6000858152600160205260409020548110156104ae57600085815260016020526040812080548390811061043557610435611dfa565b9060005260206000200154905084810361049b5760405162461bcd60e51b815260206004820152602160248201527f436f6e666c6963743a204b657920616c72656164792068617320707572706f736044820152606560f81b6064820152608401610386565b50806104a681611e26565b9150506103ff565b506000848152600160208181526040832080549283018155835290912001839055610520565b60008481526001602081815260408084206002810189905581518084019092528782529388905290829052610509929161184f565b506000848152600160208190526040909120018290555b600083815260026020908152604080832080546001810182559084529183209091018690555183918591879160008051602061214a83398151915291a45060019392505050565b60065460009060ff6101009091041615156001146105975760405162461bcd60e51b815260040161038690611d55565b33301461061d576105cf336040516020016105b29190611da8565b60405160208183030381529060405280519060200120600361159d565b61061d5760405162461bcd60e51b815260206004820152602b602482015260008051602061216a83398151915260448201526a6520434c41494d206b657960a81b6064820152608401610386565b600082815260046020526040812054900361068e5760405162461bcd60e51b815260206004820152602b60248201527f4e6f6e4578697374696e673a205468657265206973206e6f20636c61696d207760448201526a1a5d1a081d1a1a5cc8125160aa1b6064820152608401610386565b60005b6000838152600460209081526040808320548352600590915290208054849190839081106106c1576106c1611dfa565b9060005260206000200154146106e357806106db81611e26565b915050610691565b600083815260046020908152604080832054835260059091529020805461070c90600190611e3f565b8154811061071c5761071c611dfa565b60009182526020808320909101548583526004825260408084205484526005909252912080548390811061075257610752611dfa565b600091825260208083209091019290925584815260048252604080822054825260059092522080548061078757610787611e52565b60008281526020808220830160001990810183905590920190925584825260049081905260409182902060028101548154600183015494516001600160a01b0390921694909388937f3cf57863a89432c61c4a27073c6ee39e8a764bff5a05aebfbcdcdc80b2e6130a9361080a9392600383019290810191600590910190611f1f565b60405180910390a46000838152600460205260408120818155600181018290556002810180546001600160a01b03191690559061084a600383018261189a565b61085860048301600061189a565b61086660058301600061189a565b505060019150505b919050565b60065460009060ff6101009091041615156001146108a35760405162461bcd60e51b815260040161038690611d55565b600083815260016020526040902060020154831461090d5760405162461bcd60e51b815260206004820152602160248201527f4e6f6e4578697374696e673a204b65792069736e2774207265676973746572656044820152601960fa1b6064820152608401610386565b33301461094457610928336040516020016103aa9190611da8565b6109445760405162461bcd60e51b815260040161038690611dbc565b60008381526001602052604090205461096f5760405162461bcd60e51b815260040161038690611f5e565b60005b600084815260016020526040902080548491908390811061099557610995611dfa565b9060005260206000200154146109ca57806109af81611e26565b60008681526001602052604090205490925082109050610972575b60008481526001602052604090205481106109f75760405162461bcd60e51b815260040161038690611f5e565b600084815260016020819052604090912080549091610a1591611e3f565b81548110610a2557610a25611dfa565b9060005260206000200154600160008681526020019081526020016000206000018281548110610a5757610a57611dfa565b6000918252602080832090910192909255858152600190915260409020805480610a8357610a83611e52565b6001900381819060005260206000200160009055905560005b6000848152600260205260409020805486919083908110610abf57610abf611dfa565b906000526020600020015414610ae15780610ad981611e26565b915050610a9c565b60008481526002602052604090208054610afd90600190611e3f565b81548110610b0d57610b0d611dfa565b9060005260206000200154600260008681526020019081526020016000208281548110610b3c57610b3c611dfa565b906000526020600020018190555060026000858152602001908152602001600020805480610b6c57610b6c611e52565b60008281526020808220830160001990810183905590920190925586825260019081905260408220908101549054909103610bcb57600086815260016020526040812090610bba82826118d4565b506000600182018190556002909101555b8085877f585a4aef50f8267a92b32412b331b20f7f8b96f2245b253b9cc50dcc621d339760405160405180910390a4600193505050505b92915050565b60065460009060ff610100909104161515600114610c385760405162461bcd60e51b815260040161038690611d55565b610c6933604051602001610c4c9190611da8565b60405160208183030381529060405280519060200120600261159d565b610cb55760405162461bcd60e51b815260206004820152601f60248201527f53656e64657220646f6573206e6f74206861766520616374696f6e206b6579006044820152606401610386565b827fb3932da477fe5d6c8ff2eafef050c0f3a1af18fc07121001482600f36f3715d883604051610ce9911515815260200190565b60405180910390a2811515600103610e8d576000838152600360208181526040808420928301805460ff1916600190811790915583549084015491516001600160a01b03909116949193610d44936002909101929101611fa8565b60408051601f1981840301815290829052610d5e91611fcd565b60006040518083038185875af1925050503d8060008114610d9b576040519150601f19603f3d011682016040523d82523d6000602084013e610da0565b606091505b50909150508015610e2557600083815260036020819052604091829020908101805461ff00191661010017905560018101548154925190926001600160a01b03169186917f1f920dbda597d7bf95035464170fa58d0a4b57f13a1c315ace6793b9f63688b891610e1591600290910190611fe9565b60405180910390a4506001610c02565b6000838152600360205260409081902060018101548154925190926001600160a01b03169186917fe10c49d9f7c71da23262367013434763cfdb2332267641728d25cd712c5c6a6891610e7d91600290910190611fe9565b60405180910390a4506000610c02565b5050600090815260036020819052604090912001805460ff19169055600190565b600081815260056020908152604091829020805483518184028101840190945280845260609392830182828015610f0457602002820191906000526020600020905b815481526020019060010190808311610ef0575b50505050509050919050565b600081815260026020908152604091829020805483518184028101840190945280845260609392830182828015610f045760200282019190600052602060002090815481526020019060010190808311610ef05750505050509050919050565b60065460009060ff610100909104161515600114610fa05760405162461bcd60e51b815260040161038690611d55565b604080516001600160a01b0387166020808301919091528183018a90528251808303840181526060909201909252805191012030331461104357610fee336040516020016105b29190611da8565b6110435760405162461bcd60e51b8152602060048201526032602482015260008051602061216a8339815191526044820152716520636c61696d207369676e6572206b657960701b6064820152608401610386565b6000818152600460205260409020600201546001600160a01b038781169116146111515760008881526005602090815260408083208054600180820183559185528385200185905584845260049092529091208981559081018890556002810180546001600160a01b0319166001600160a01b0389161790556003016110c9868261204b565b506000818152600460208190526040909120016110e6858261204b565b506000818152600460205260409020600501611102848261204b565b50856001600160a01b031688827f46149b18aa084502c3f12bc75e19eda8bda8d102b82cce8474677a6d0d5f43c58a898989604051611144949392919061210a565b60405180910390a4611217565b6000818152600460205260409020888155600181018890556002810180546001600160a01b0319166001600160a01b038916179055600301611193868261204b565b506000818152600460208190526040909120016111b0858261204b565b5060008181526004602052604090206005016111cc848261204b565b50856001600160a01b031688827f3bab293fc00db832d7619a9299914251b8747c036867ec056cbd506f60135b138a89898960405161120e949392919061210a565b60405180910390a45b979650505050505050565b60065460009060ff6101009091041615156001146112525760405162461bcd60e51b815260040161038690611d55565b6000805481526003602081905260409091200154610100900460ff16156112ae5760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e48195e1958dd5d195960821b6044820152606401610386565b6000805481526003602052604080822080546001600160a01b0319166001600160a01b038816179055815482528082206001018590558154825290206002016112f7838261204b565b5082846001600160a01b03166000547f8afcfabcb00e47a53a8fc3e9f23ff47ee1926194bb1350dd007c50b412a6cee8856040516113359190611a5e565b60405180910390a461135133604051602001610c4c9190611da8565b15611365576113636000546001610c08565b505b60008054908061137483611e26565b919050555060016000546113889190611e3f565b949350505050565b611399816116fe565b50565b600081815260046020819052604082208054600182015460028301546003840180548796879660609687968796919590946001600160a01b039092169390929081019160059091019083906113f090611e68565b80601f016020809104026020016040519081016040528092919081815260200182805461141c90611e68565b80156114695780601f1061143e57610100808354040283529160200191611469565b820191906000526020600020905b81548152906001019060200180831161144c57829003601f168201915b5050505050925081805461147c90611e68565b80601f01602080910402602001604051908101604052809291908181526020018280546114a890611e68565b80156114f55780601f106114ca576101008083540402835291602001916114f5565b820191906000526020600020905b8154815290600101906020018083116114d857829003601f168201915b5050505050915080805461150890611e68565b80601f016020809104026020016040519081016040528092919081815260200182805461153490611e68565b80156115815780601f1061155657610100808354040283529160200191611581565b820191906000526020600020905b81548152906001019060200180831161156457829003601f168201915b5050505050905095509550955095509550955091939550919395565b600082815260016020908152604080832081518154608094810282018501909352606081018381528594919384928491908401828280156115fd57602002820191906000526020600020905b8154815260200190600101908083116115e9575b505050918352505060018201546020820152600290910154604091820152810151909150600003611632576000915050610c02565b60005b8151518110156116935760008260000151828151811061165757611657611dfa565b60200260200101519050806001148061166f57508481145b156116805760019350505050610c02565b508061168b81611e26565b915050611635565b506000949350505050565b600081815260016020908152604091829020805483518184028101840190945280845260609392830182828015610f045760200282019190600052602060002090815481526020019060010190808311610ef05750505050509050919050565b60065460ff16158061170f5750303b155b61175b5760405162461bcd60e51b815260206004820152601e60248201527f496e697469616c206b65792077617320616c72656164792073657475702e00006044820152606401610386565b6006805461ffff191661010117905560405160009061177e908390602001611da8565b60408051601f1981840301815282825280516020918201206000818152600180845284822060028101849055868501909552808652908290529182905293506117c792906118f2565b506000818152600160208181526040808420830183905560029091527fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0805480840182559084527f7fef4bf8f63cf9dd467136c679c02b5c17fcf6322d9562512bf5eb952cf7cc53018490555190918291849160008051602061214a83398151915291a45050565b82805482825590600052602060002090810192821561188a579160200282015b8281111561188a57825182559160200191906001019061186f565b50611896929150611932565b5090565b5080546118a690611e68565b6000825580601f106118b6575050565b601f0160209004906000526020600020908101906113999190611932565b50805460008255906000526020600020908101906113999190611932565b82805482825590600052602060002090810192821561188a579160200282015b8281111561188a578251829060ff16905591602001919060010190611912565b5b808211156118965760008155600101611933565b60006020828403121561195957600080fd5b5035919050565b600081518084526020808501945080840160005b8381101561199057815187529582019590820190600101611974565b509495945050505050565b6060815260006119ae6060830186611960565b60208301949094525060400152919050565b6000806000606084860312156119d557600080fd5b505081359360208301359350604090920135919050565b600080604083850312156119ff57600080fd5b50508035926020909101359150565b60005b83811015611a29578181015183820152602001611a11565b50506000910152565b60008151808452611a4a816020860160208601611a0e565b601f01601f19169290920160200192915050565b602081526000611a716020830184611a32565b9392505050565b60008060408385031215611a8b57600080fd5b8235915060208301358015158114611aa257600080fd5b809150509250929050565b6020808252825182820181905260009190848201906040850190845b81811015611ae557835183529284019291840191600101611ac9565b50909695505050505050565b80356001600160a01b038116811461086e57600080fd5b634e487b7160e01b600052604160045260246000fd5b60006001600160401b0380841115611b3857611b38611b08565b604051601f8501601f19908116603f01168101908282118183101715611b6057611b60611b08565b81604052809350858152868686011115611b7957600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112611ba457600080fd5b611a7183833560208501611b1e565b60008060008060008060c08789031215611bcc57600080fd5b8635955060208701359450611be360408801611af1565b935060608701356001600160401b0380821115611bff57600080fd5b611c0b8a838b01611b93565b94506080890135915080821115611c2157600080fd5b611c2d8a838b01611b93565b935060a0890135915080821115611c4357600080fd5b508701601f81018913611c5557600080fd5b611c6489823560208401611b1e565b9150509295509295509295565b600080600060608486031215611c8657600080fd5b611c8f84611af1565b92506020840135915060408401356001600160401b03811115611cb157600080fd5b611cbd86828701611b93565b9150509250925092565b600060208284031215611cd957600080fd5b611a7182611af1565b86815285602082015260018060a01b038516604082015260c060608201526000611d0f60c0830186611a32565b8281036080840152611d218186611a32565b905082810360a0840152611d358185611a32565b9998505050505050505050565b602081526000611a716020830184611960565b60208082526033908201527f496e746572616374696e67207769746820746865206c69627261727920636f6e6040820152723a3930b1ba1034b9903337b93134b23232b71760691b606082015260800190565b6001600160a01b0391909116815260200190565b602080825260309082015260008051602061216a83398151915260408201526f65206d616e6167656d656e74206b657960801b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611e3857611e38611e10565b5060010190565b81810381811115610c0257610c02611e10565b634e487b7160e01b600052603160045260246000fd5b600181811c90821680611e7c57607f821691505b602082108103611e9c57634e487b7160e01b600052602260045260246000fd5b50919050565b60008154611eaf81611e68565b808552602060018381168015611ecc5760018114611ee657611f14565b60ff1985168884015283151560051b880183019550611f14565b866000528260002060005b85811015611f0c5781548a8201860152908301908401611ef1565b890184019650505b505050505092915050565b848152608060208201526000611f386080830186611ea2565b8281036040840152611f4a8186611ea2565b905082810360608401526112178185611ea2565b6020808252602a908201527f4e6f6e4578697374696e673a204b657920646f65736e27742068617665207375604082015269636820707572706f736560b01b606082015260800190565b604081526000611fbb6040830185611ea2565b905060ff831660208301529392505050565b60008251611fdf818460208701611a0e565b9190910192915050565b602081526000611a716020830184611ea2565b601f82111561204657600081815260208120601f850160051c810160208610156120235750805b601f850160051c820191505b818110156120425782815560010161202f565b5050505b505050565b81516001600160401b0381111561206457612064611b08565b612078816120728454611e68565b84611ffc565b602080601f8311600181146120ad57600084156120955750858301515b600019600386901b1c1916600185901b178555612042565b600085815260208120601f198616915b828110156120dc578886015182559484019460019091019084016120bd565b50858210156120fa5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8481526080602082015260006121236080830186611a32565b82810360408401526121358186611a32565b905082810360608401526112178185611a3256fe480000bb1edad8ca1470381cc334b1917fbd51c6531f3a623ea8e0ec7e38a6e95065726d697373696f6e733a2053656e64657220646f6573206e6f7420686176a2646970667358221220f4815d23122732b3b3772685bb96c7b7a616f339162f5d75089f8d5b875df58164736f6c63430008110033",
  "deployedBytecode": "0x6080604052600436106100ad5760003560e01c806312aaac70146100b25780631d381240146100ea5780634eee424a1461011a57806353d413c51461013a57806354fd4d501461015a578063747442d31461018e57806380e9e9e1146101ae5780639010f726146101db578063b1a34e0d146101fb578063b61d27f614610229578063c4d66de81461023c578063c9100bcb1461025e578063d202158d14610290578063fb307b34146102b0575b600080fd5b3480156100be57600080fd5b506100d26100cd366004611947565b6102dd565b6040516100e19392919061199b565b60405180910390f35b3480156100f657600080fd5b5061010a6101053660046119c0565b610356565b60405190151581526020016100e1565b34801561012657600080fd5b5061010a610135366004611947565b610567565b34801561014657600080fd5b5061010a6101553660046119ec565b610873565b34801561016657600080fd5b5060408051808201825260058152640312e342e360dc1b602082015290516100e19190611a5e565b34801561019a57600080fd5b5061010a6101a9366004611a78565b610c08565b3480156101ba57600080fd5b506101ce6101c9366004611947565b610eae565b6040516100e19190611aad565b3480156101e757600080fd5b506101ce6101f6366004611947565b610f10565b34801561020757600080fd5b5061021b610216366004611bb3565b610f70565b6040519081526020016100e1565b61021b610237366004611c71565b611222565b34801561024857600080fd5b5061025c610257366004611cc7565b611390565b005b34801561026a57600080fd5b5061027e610279366004611947565b61139c565b6040516100e196959493929190611ce2565b34801561029c57600080fd5b5061010a6102ab3660046119ec565b61159d565b3480156102bc57600080fd5b506102d06102cb366004611947565b61169e565b6040516100e19190611d42565b60008181526001602081815260408084209283015460028401548454835181860281018601909452808452606096958695909491859183018282801561034257602002820191906000526020600020905b81548152602001906001019080831161032e575b505050505092509250925092509193909250565b60065460009060ff61010090910416151560011461038f5760405162461bcd60e51b815260040161038690611d55565b60405180910390fd5b3330146103e3576103c7336040516020016103aa9190611da8565b60405160208183030381529060405280519060200120600161159d565b6103e35760405162461bcd60e51b815260040161038690611dbc565b6000848152600160205260409020600201548490036104d45760005b6000858152600160205260409020548110156104ae57600085815260016020526040812080548390811061043557610435611dfa565b9060005260206000200154905084810361049b5760405162461bcd60e51b815260206004820152602160248201527f436f6e666c6963743a204b657920616c72656164792068617320707572706f736044820152606560f81b6064820152608401610386565b50806104a681611e26565b9150506103ff565b506000848152600160208181526040832080549283018155835290912001839055610520565b60008481526001602081815260408084206002810189905581518084019092528782529388905290829052610509929161184f565b506000848152600160208190526040909120018290555b600083815260026020908152604080832080546001810182559084529183209091018690555183918591879160008051602061214a83398151915291a45060019392505050565b60065460009060ff6101009091041615156001146105975760405162461bcd60e51b815260040161038690611d55565b33301461061d576105cf336040516020016105b29190611da8565b60405160208183030381529060405280519060200120600361159d565b61061d5760405162461bcd60e51b815260206004820152602b602482015260008051602061216a83398151915260448201526a6520434c41494d206b657960a81b6064820152608401610386565b600082815260046020526040812054900361068e5760405162461bcd60e51b815260206004820152602b60248201527f4e6f6e4578697374696e673a205468657265206973206e6f20636c61696d207760448201526a1a5d1a081d1a1a5cc8125160aa1b6064820152608401610386565b60005b6000838152600460209081526040808320548352600590915290208054849190839081106106c1576106c1611dfa565b9060005260206000200154146106e357806106db81611e26565b915050610691565b600083815260046020908152604080832054835260059091529020805461070c90600190611e3f565b8154811061071c5761071c611dfa565b60009182526020808320909101548583526004825260408084205484526005909252912080548390811061075257610752611dfa565b600091825260208083209091019290925584815260048252604080822054825260059092522080548061078757610787611e52565b60008281526020808220830160001990810183905590920190925584825260049081905260409182902060028101548154600183015494516001600160a01b0390921694909388937f3cf57863a89432c61c4a27073c6ee39e8a764bff5a05aebfbcdcdc80b2e6130a9361080a9392600383019290810191600590910190611f1f565b60405180910390a46000838152600460205260408120818155600181018290556002810180546001600160a01b03191690559061084a600383018261189a565b61085860048301600061189a565b61086660058301600061189a565b505060019150505b919050565b60065460009060ff6101009091041615156001146108a35760405162461bcd60e51b815260040161038690611d55565b600083815260016020526040902060020154831461090d5760405162461bcd60e51b815260206004820152602160248201527f4e6f6e4578697374696e673a204b65792069736e2774207265676973746572656044820152601960fa1b6064820152608401610386565b33301461094457610928336040516020016103aa9190611da8565b6109445760405162461bcd60e51b815260040161038690611dbc565b60008381526001602052604090205461096f5760405162461bcd60e51b815260040161038690611f5e565b60005b600084815260016020526040902080548491908390811061099557610995611dfa565b9060005260206000200154146109ca57806109af81611e26565b60008681526001602052604090205490925082109050610972575b60008481526001602052604090205481106109f75760405162461bcd60e51b815260040161038690611f5e565b600084815260016020819052604090912080549091610a1591611e3f565b81548110610a2557610a25611dfa565b9060005260206000200154600160008681526020019081526020016000206000018281548110610a5757610a57611dfa565b6000918252602080832090910192909255858152600190915260409020805480610a8357610a83611e52565b6001900381819060005260206000200160009055905560005b6000848152600260205260409020805486919083908110610abf57610abf611dfa565b906000526020600020015414610ae15780610ad981611e26565b915050610a9c565b60008481526002602052604090208054610afd90600190611e3f565b81548110610b0d57610b0d611dfa565b9060005260206000200154600260008681526020019081526020016000208281548110610b3c57610b3c611dfa565b906000526020600020018190555060026000858152602001908152602001600020805480610b6c57610b6c611e52565b60008281526020808220830160001990810183905590920190925586825260019081905260408220908101549054909103610bcb57600086815260016020526040812090610bba82826118d4565b506000600182018190556002909101555b8085877f585a4aef50f8267a92b32412b331b20f7f8b96f2245b253b9cc50dcc621d339760405160405180910390a4600193505050505b92915050565b60065460009060ff610100909104161515600114610c385760405162461bcd60e51b815260040161038690611d55565b610c6933604051602001610c4c9190611da8565b60405160208183030381529060405280519060200120600261159d565b610cb55760405162461bcd60e51b815260206004820152601f60248201527f53656e64657220646f6573206e6f74206861766520616374696f6e206b6579006044820152606401610386565b827fb3932da477fe5d6c8ff2eafef050c0f3a1af18fc07121001482600f36f3715d883604051610ce9911515815260200190565b60405180910390a2811515600103610e8d576000838152600360208181526040808420928301805460ff1916600190811790915583549084015491516001600160a01b03909116949193610d44936002909101929101611fa8565b60408051601f1981840301815290829052610d5e91611fcd565b60006040518083038185875af1925050503d8060008114610d9b576040519150601f19603f3d011682016040523d82523d6000602084013e610da0565b606091505b50909150508015610e2557600083815260036020819052604091829020908101805461ff00191661010017905560018101548154925190926001600160a01b03169186917f1f920dbda597d7bf95035464170fa58d0a4b57f13a1c315ace6793b9f63688b891610e1591600290910190611fe9565b60405180910390a4506001610c02565b6000838152600360205260409081902060018101548154925190926001600160a01b03169186917fe10c49d9f7c71da23262367013434763cfdb2332267641728d25cd712c5c6a6891610e7d91600290910190611fe9565b60405180910390a4506000610c02565b5050600090815260036020819052604090912001805460ff19169055600190565b600081815260056020908152604091829020805483518184028101840190945280845260609392830182828015610f0457602002820191906000526020600020905b815481526020019060010190808311610ef0575b50505050509050919050565b600081815260026020908152604091829020805483518184028101840190945280845260609392830182828015610f045760200282019190600052602060002090815481526020019060010190808311610ef05750505050509050919050565b60065460009060ff610100909104161515600114610fa05760405162461bcd60e51b815260040161038690611d55565b604080516001600160a01b0387166020808301919091528183018a90528251808303840181526060909201909252805191012030331461104357610fee336040516020016105b29190611da8565b6110435760405162461bcd60e51b8152602060048201526032602482015260008051602061216a8339815191526044820152716520636c61696d207369676e6572206b657960701b6064820152608401610386565b6000818152600460205260409020600201546001600160a01b038781169116146111515760008881526005602090815260408083208054600180820183559185528385200185905584845260049092529091208981559081018890556002810180546001600160a01b0319166001600160a01b0389161790556003016110c9868261204b565b506000818152600460208190526040909120016110e6858261204b565b506000818152600460205260409020600501611102848261204b565b50856001600160a01b031688827f46149b18aa084502c3f12bc75e19eda8bda8d102b82cce8474677a6d0d5f43c58a898989604051611144949392919061210a565b60405180910390a4611217565b6000818152600460205260409020888155600181018890556002810180546001600160a01b0319166001600160a01b038916179055600301611193868261204b565b506000818152600460208190526040909120016111b0858261204b565b5060008181526004602052604090206005016111cc848261204b565b50856001600160a01b031688827f3bab293fc00db832d7619a9299914251b8747c036867ec056cbd506f60135b138a89898960405161120e949392919061210a565b60405180910390a45b979650505050505050565b60065460009060ff6101009091041615156001146112525760405162461bcd60e51b815260040161038690611d55565b6000805481526003602081905260409091200154610100900460ff16156112ae5760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e48195e1958dd5d195960821b6044820152606401610386565b6000805481526003602052604080822080546001600160a01b0319166001600160a01b038816179055815482528082206001018590558154825290206002016112f7838261204b565b5082846001600160a01b03166000547f8afcfabcb00e47a53a8fc3e9f23ff47ee1926194bb1350dd007c50b412a6cee8856040516113359190611a5e565b60405180910390a461135133604051602001610c4c9190611da8565b15611365576113636000546001610c08565b505b60008054908061137483611e26565b919050555060016000546113889190611e3f565b949350505050565b611399816116fe565b50565b600081815260046020819052604082208054600182015460028301546003840180548796879660609687968796919590946001600160a01b039092169390929081019160059091019083906113f090611e68565b80601f016020809104026020016040519081016040528092919081815260200182805461141c90611e68565b80156114695780601f1061143e57610100808354040283529160200191611469565b820191906000526020600020905b81548152906001019060200180831161144c57829003601f168201915b5050505050925081805461147c90611e68565b80601f01602080910402602001604051908101604052809291908181526020018280546114a890611e68565b80156114f55780601f106114ca576101008083540402835291602001916114f5565b820191906000526020600020905b8154815290600101906020018083116114d857829003601f168201915b5050505050915080805461150890611e68565b80601f016020809104026020016040519081016040528092919081815260200182805461153490611e68565b80156115815780601f1061155657610100808354040283529160200191611581565b820191906000526020600020905b81548152906001019060200180831161156457829003601f168201915b5050505050905095509550955095509550955091939550919395565b600082815260016020908152604080832081518154608094810282018501909352606081018381528594919384928491908401828280156115fd57602002820191906000526020600020905b8154815260200190600101908083116115e9575b505050918352505060018201546020820152600290910154604091820152810151909150600003611632576000915050610c02565b60005b8151518110156116935760008260000151828151811061165757611657611dfa565b60200260200101519050806001148061166f57508481145b156116805760019350505050610c02565b508061168b81611e26565b915050611635565b506000949350505050565b600081815260016020908152604091829020805483518184028101840190945280845260609392830182828015610f045760200282019190600052602060002090815481526020019060010190808311610ef05750505050509050919050565b60065460ff16158061170f5750303b155b61175b5760405162461bcd60e51b815260206004820152601e60248201527f496e697469616c206b65792077617320616c72656164792073657475702e00006044820152606401610386565b6006805461ffff191661010117905560405160009061177e908390602001611da8565b60408051601f1981840301815282825280516020918201206000818152600180845284822060028101849055868501909552808652908290529182905293506117c792906118f2565b506000818152600160208181526040808420830183905560029091527fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0805480840182559084527f7fef4bf8f63cf9dd467136c679c02b5c17fcf6322d9562512bf5eb952cf7cc53018490555190918291849160008051602061214a83398151915291a45050565b82805482825590600052602060002090810192821561188a579160200282015b8281111561188a57825182559160200191906001019061186f565b50611896929150611932565b5090565b5080546118a690611e68565b6000825580601f106118b6575050565b601f0160209004906000526020600020908101906113999190611932565b50805460008255906000526020600020908101906113999190611932565b82805482825590600052602060002090810192821561188a579160200282015b8281111561188a578251829060ff16905591602001919060010190611912565b5b808211156118965760008155600101611933565b60006020828403121561195957600080fd5b5035919050565b600081518084526020808501945080840160005b8381101561199057815187529582019590820190600101611974565b509495945050505050565b6060815260006119ae6060830186611960565b60208301949094525060400152919050565b6000806000606084860312156119d557600080fd5b505081359360208301359350604090920135919050565b600080604083850312156119ff57600080fd5b50508035926020909101359150565b60005b83811015611a29578181015183820152602001611a11565b50506000910152565b60008151808452611a4a816020860160208601611a0e565b601f01601f19169290920160200192915050565b602081526000611a716020830184611a32565b9392505050565b60008060408385031215611a8b57600080fd5b8235915060208301358015158114611aa257600080fd5b809150509250929050565b6020808252825182820181905260009190848201906040850190845b81811015611ae557835183529284019291840191600101611ac9565b50909695505050505050565b80356001600160a01b038116811461086e57600080fd5b634e487b7160e01b600052604160045260246000fd5b60006001600160401b0380841115611b3857611b38611b08565b604051601f8501601f19908116603f01168101908282118183101715611b6057611b60611b08565b81604052809350858152868686011115611b7957600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112611ba457600080fd5b611a7183833560208501611b1e565b60008060008060008060c08789031215611bcc57600080fd5b8635955060208701359450611be360408801611af1565b935060608701356001600160401b0380821115611bff57600080fd5b611c0b8a838b01611b93565b94506080890135915080821115611c2157600080fd5b611c2d8a838b01611b93565b935060a0890135915080821115611c4357600080fd5b508701601f81018913611c5557600080fd5b611c6489823560208401611b1e565b9150509295509295509295565b600080600060608486031215611c8657600080fd5b611c8f84611af1565b92506020840135915060408401356001600160401b03811115611cb157600080fd5b611cbd86828701611b93565b9150509250925092565b600060208284031215611cd957600080fd5b611a7182611af1565b86815285602082015260018060a01b038516604082015260c060608201526000611d0f60c0830186611a32565b8281036080840152611d218186611a32565b905082810360a0840152611d358185611a32565b9998505050505050505050565b602081526000611a716020830184611960565b60208082526033908201527f496e746572616374696e67207769746820746865206c69627261727920636f6e6040820152723a3930b1ba1034b9903337b93134b23232b71760691b606082015260800190565b6001600160a01b0391909116815260200190565b602080825260309082015260008051602061216a83398151915260408201526f65206d616e6167656d656e74206b657960801b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611e3857611e38611e10565b5060010190565b81810381811115610c0257610c02611e10565b634e487b7160e01b600052603160045260246000fd5b600181811c90821680611e7c57607f821691505b602082108103611e9c57634e487b7160e01b600052602260045260246000fd5b50919050565b60008154611eaf81611e68565b808552602060018381168015611ecc5760018114611ee657611f14565b60ff1985168884015283151560051b880183019550611f14565b866000528260002060005b85811015611f0c5781548a8201860152908301908401611ef1565b890184019650505b505050505092915050565b848152608060208201526000611f386080830186611ea2565b8281036040840152611f4a8186611ea2565b905082810360608401526112178185611ea2565b6020808252602a908201527f4e6f6e4578697374696e673a204b657920646f65736e27742068617665207375604082015269636820707572706f736560b01b606082015260800190565b604081526000611fbb6040830185611ea2565b905060ff831660208301529392505050565b60008251611fdf818460208701611a0e565b9190910192915050565b602081526000611a716020830184611ea2565b601f82111561204657600081815260208120601f850160051c810160208610156120235750805b601f850160051c820191505b818110156120425782815560010161202f565b5050505b505050565b81516001600160401b0381111561206457612064611b08565b612078816120728454611e68565b84611ffc565b602080601f8311600181146120ad57600084156120955750858301515b600019600386901b1c1916600185901b178555612042565b600085815260208120601f198616915b828110156120dc578886015182559484019460019091019084016120bd565b50858210156120fa5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8481526080602082015260006121236080830186611a32565b82810360408401526121358186611a32565b905082810360608401526112178185611a3256fe480000bb1edad8ca1470381cc334b1917fbd51c6531f3a623ea8e0ec7e38a6e95065726d697373696f6e733a2053656e64657220646f6573206e6f7420686176a2646970667358221220f4815d23122732b3b3772685bb96c7b7a616f339162f5d75089f8d5b875df58164736f6c63430008110033",
  "immutableReferences": {},
  "generatedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:1035:54",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:54",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "109:357:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "155:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "164:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "167:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "157:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "157:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "157:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "130:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "139:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "126:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "126:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "151:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "122:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "122:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "119:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "180:29:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "199:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "193:5:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "193:16:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "184:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "272:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "281:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "284:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "274:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "274:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "274:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "231:5:54"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "242:5:54"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "257:3:54",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "262:1:54",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "253:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "253:11:54"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "266:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "249:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "249:19:54"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "238:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "238:31:54"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "228:2:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "228:42:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "221:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "221:50:54"
                  },
                  "nodeType": "YulIf",
                  "src": "218:70:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "297:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "307:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "297:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "321:40:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "346:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "357:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "342:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "342:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "336:5:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "336:25:54"
                  },
                  "variables": [
                    {
                      "name": "value_1",
                      "nodeType": "YulTypedName",
                      "src": "325:7:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "418:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "427:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "430:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "420:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "420:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "420:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value_1",
                            "nodeType": "YulIdentifier",
                            "src": "383:7:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "406:7:54"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "399:6:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "399:15:54"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "392:6:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "392:23:54"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "380:2:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "380:36:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "373:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "373:44:54"
                  },
                  "nodeType": "YulIf",
                  "src": "370:64:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "443:17:54",
                  "value": {
                    "name": "value_1",
                    "nodeType": "YulIdentifier",
                    "src": "453:7:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "443:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_bool_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "67:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "78:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "90:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "98:6:54",
                "type": ""
              }
            ],
            "src": "14:452:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "645:180:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "662:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "673:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "655:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "655:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "655:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "696:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "707:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "692:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "692:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "712:2:54",
                        "type": "",
                        "value": "30"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "685:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "685:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "685:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "735:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "746:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "731:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "731:18:54"
                      },
                      {
                        "hexValue": "496e697469616c206b65792077617320616c72656164792073657475702e",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "751:32:54",
                        "type": "",
                        "value": "Initial key was already setup."
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "724:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "724:60:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "724:60:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "793:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "805:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "816:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "801:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "801:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "793:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_f97b6c8710e53ddda282a80ef5956d499e3405b5bb60ff3bc53f8e99e471fc0e__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "622:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "636:4:54",
                "type": ""
              }
            ],
            "src": "471:354:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "931:102:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "941:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "953:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "964:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "949:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "949:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "941:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "983:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "998:6:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1014:3:54",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1019:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "1010:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1010:11:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1023:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "1006:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1006:19:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "994:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "994:32:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "976:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "976:51:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "976:51:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "900:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "911:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "922:4:54",
                "type": ""
              }
            ],
            "src": "830:203:54"
          }
        ]
      },
      "contents": "{\n    { }\n    function abi_decode_tuple_t_addresst_bool_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n        let value_1 := mload(add(headStart, 32))\n        if iszero(eq(value_1, iszero(iszero(value_1)))) { revert(0, 0) }\n        value1 := value_1\n    }\n    function abi_encode_tuple_t_stringliteral_f97b6c8710e53ddda282a80ef5956d499e3405b5bb60ff3bc53f8e99e471fc0e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 30)\n        mstore(add(headStart, 64), \"Initial key was already setup.\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n}",
      "id": 54,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:20606:54",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:54",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "84:110:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "130:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "139:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "142:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "132:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "132:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "132:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "105:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "114:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "101:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "101:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "126:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "97:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "97:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "94:52:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "155:33:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "178:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "165:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "165:23:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "155:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "50:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "61:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "73:6:54",
                "type": ""
              }
            ],
            "src": "14:180:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "260:374:54",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "270:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "290:5:54"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "284:5:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "284:12:54"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "274:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "312:3:54"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "317:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "305:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "305:19:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "305:19:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "333:14:54",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "343:4:54",
                    "type": "",
                    "value": "0x20"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "337:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "356:19:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "367:3:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "372:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "363:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "363:12:54"
                  },
                  "variableNames": [
                    {
                      "name": "pos",
                      "nodeType": "YulIdentifier",
                      "src": "356:3:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "384:28:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "402:5:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "409:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "398:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "398:14:54"
                  },
                  "variables": [
                    {
                      "name": "srcPtr",
                      "nodeType": "YulTypedName",
                      "src": "388:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "421:10:54",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "430:1:54",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "i",
                      "nodeType": "YulTypedName",
                      "src": "425:1:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "489:120:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "pos",
                              "nodeType": "YulIdentifier",
                              "src": "510:3:54"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulIdentifier",
                                  "src": "521:6:54"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "515:5:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "515:13:54"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "503:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "503:26:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "503:26:54"
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "542:19:54",
                        "value": {
                          "arguments": [
                            {
                              "name": "pos",
                              "nodeType": "YulIdentifier",
                              "src": "553:3:54"
                            },
                            {
                              "name": "_1",
                              "nodeType": "YulIdentifier",
                              "src": "558:2:54"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "549:3:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "549:12:54"
                        },
                        "variableNames": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "542:3:54"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "574:25:54",
                        "value": {
                          "arguments": [
                            {
                              "name": "srcPtr",
                              "nodeType": "YulIdentifier",
                              "src": "588:6:54"
                            },
                            {
                              "name": "_1",
                              "nodeType": "YulIdentifier",
                              "src": "596:2:54"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "584:3:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "584:15:54"
                        },
                        "variableNames": [
                          {
                            "name": "srcPtr",
                            "nodeType": "YulIdentifier",
                            "src": "574:6:54"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "451:1:54"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "454:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "448:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "448:13:54"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "462:18:54",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "464:14:54",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nodeType": "YulIdentifier",
                              "src": "473:1:54"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "476:1:54",
                              "type": "",
                              "value": "1"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "469:3:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "469:9:54"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "464:1:54"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "444:3:54",
                    "statements": []
                  },
                  "src": "440:169:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "618:10:54",
                  "value": {
                    "name": "pos",
                    "nodeType": "YulIdentifier",
                    "src": "625:3:54"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "618:3:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_array_uint256_dyn",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "237:5:54",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "244:3:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "252:3:54",
                "type": ""
              }
            ],
            "src": "199:435:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "846:196:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "863:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "874:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "856:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "856:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "856:21:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "886:64:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "923:6:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "935:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "946:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "931:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "931:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_array_uint256_dyn",
                      "nodeType": "YulIdentifier",
                      "src": "894:28:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "894:56:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "886:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "970:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "981:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "966:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "966:18:54"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "986:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "959:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "959:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "959:34:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1013:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1024:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1009:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1009:18:54"
                      },
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "1029:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1002:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1002:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1002:34:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_uint256_t_bytes32__to_t_array$_t_uint256_$dyn_memory_ptr_t_uint256_t_bytes32__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "799:9:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "810:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "818:6:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "826:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "837:4:54",
                "type": ""
              }
            ],
            "src": "639:403:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1151:212:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1197:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1206:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1209:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1199:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1199:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1199:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1172:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1181:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "1168:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1168:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1193:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "1164:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1164:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "1161:52:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1222:33:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1245:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1232:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1232:23:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "1222:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1264:42:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1291:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1302:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1287:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1287:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1274:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1274:32:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "1264:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1315:42:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1342:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1353:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1338:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1338:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1325:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1325:32:54"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "1315:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32t_uint256t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1101:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "1112:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1124:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "1132:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "1140:6:54",
                "type": ""
              }
            ],
            "src": "1047:316:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1463:92:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1473:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1485:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1496:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1481:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1481:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1473:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1515:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value0",
                                "nodeType": "YulIdentifier",
                                "src": "1540:6:54"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "1533:6:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1533:14:54"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "1526:6:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1526:22:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1508:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1508:41:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1508:41:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1432:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1443:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1454:4:54",
                "type": ""
              }
            ],
            "src": "1368:187:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1647:161:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1693:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1702:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1705:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1695:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1695:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1695:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1668:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1677:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "1664:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1664:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1689:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "1660:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1660:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "1657:52:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1718:33:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1741:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1728:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1728:23:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "1718:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1760:42:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1787:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1798:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1783:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1783:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1770:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1770:32:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "1760:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1605:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "1616:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1628:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "1636:6:54",
                "type": ""
              }
            ],
            "src": "1560:248:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1879:184:54",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1889:10:54",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "1898:1:54",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "i",
                      "nodeType": "YulTypedName",
                      "src": "1893:1:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1958:63:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "1983:3:54"
                                },
                                {
                                  "name": "i",
                                  "nodeType": "YulIdentifier",
                                  "src": "1988:1:54"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "1979:3:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1979:11:54"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "src",
                                      "nodeType": "YulIdentifier",
                                      "src": "2002:3:54"
                                    },
                                    {
                                      "name": "i",
                                      "nodeType": "YulIdentifier",
                                      "src": "2007:1:54"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "1998:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "1998:11:54"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "1992:5:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1992:18:54"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "1972:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1972:39:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1972:39:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "1919:1:54"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "1922:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "1916:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1916:13:54"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "1930:19:54",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "1932:15:54",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nodeType": "YulIdentifier",
                              "src": "1941:1:54"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1944:2:54",
                              "type": "",
                              "value": "32"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "1937:3:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1937:10:54"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "1932:1:54"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "1912:3:54",
                    "statements": []
                  },
                  "src": "1908:113:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dst",
                            "nodeType": "YulIdentifier",
                            "src": "2041:3:54"
                          },
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "2046:6:54"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2037:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2037:16:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2055:1:54",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2030:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2030:27:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2030:27:54"
                }
              ]
            },
            "name": "copy_memory_to_memory_with_cleanup",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "src",
                "nodeType": "YulTypedName",
                "src": "1857:3:54",
                "type": ""
              },
              {
                "name": "dst",
                "nodeType": "YulTypedName",
                "src": "1862:3:54",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "1867:6:54",
                "type": ""
              }
            ],
            "src": "1813:250:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2118:221:54",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2128:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "2148:5:54"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "2142:5:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2142:12:54"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "2132:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "2170:3:54"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "2175:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2163:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2163:19:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2163:19:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "2230:5:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2237:4:54",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2226:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2226:16:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "2248:3:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2253:4:54",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2244:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2244:14:54"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "2260:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "copy_memory_to_memory_with_cleanup",
                      "nodeType": "YulIdentifier",
                      "src": "2191:34:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2191:76:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2191:76:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2276:57:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "2291:3:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "2304:6:54"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2312:2:54",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2300:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2300:15:54"
                              },
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2321:2:54",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "2317:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2317:7:54"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "2296:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2296:29:54"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2287:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2287:39:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2328:4:54",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2283:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2283:50:54"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "2276:3:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_string",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "2095:5:54",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "2102:3:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "2110:3:54",
                "type": ""
              }
            ],
            "src": "2068:271:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2465:99:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2482:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2493:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2475:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2475:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2475:21:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2505:53:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "2531:6:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2543:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2554:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2539:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2539:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_string",
                      "nodeType": "YulIdentifier",
                      "src": "2513:17:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2513:45:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2505:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2434:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2445:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2456:4:54",
                "type": ""
              }
            ],
            "src": "2344:220:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2653:257:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2699:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2708:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2711:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2701:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2701:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2701:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "2674:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2683:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "2670:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2670:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2695:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "2666:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2666:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "2663:52:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2724:33:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2747:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2734:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2734:23:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "2724:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2766:45:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2796:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2807:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2792:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2792:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2779:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2779:32:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "2770:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2864:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2873:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2876:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2866:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2866:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2866:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "2833:5:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "2854:5:54"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "2847:6:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2847:13:54"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "2840:6:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2840:21:54"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "2830:2:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2830:32:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "2823:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2823:40:54"
                  },
                  "nodeType": "YulIf",
                  "src": "2820:60:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2889:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "2899:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "2889:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint256t_bool",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2611:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "2622:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2634:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "2642:6:54",
                "type": ""
              }
            ],
            "src": "2569:341:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2985:110:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3031:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3040:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3043:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3033:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3033:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3033:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3006:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3015:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "3002:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3002:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3027:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "2998:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2998:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "2995:52:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3056:33:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3079:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3066:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3066:23:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "3056:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2951:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "2962:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2974:6:54",
                "type": ""
              }
            ],
            "src": "2915:180:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3251:481:54",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3261:12:54",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "3271:2:54",
                    "type": "",
                    "value": "32"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "3265:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3282:32:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3300:9:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "3311:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3296:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3296:18:54"
                  },
                  "variables": [
                    {
                      "name": "tail_1",
                      "nodeType": "YulTypedName",
                      "src": "3286:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3330:9:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "3341:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3323:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3323:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3323:21:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3353:17:54",
                  "value": {
                    "name": "tail_1",
                    "nodeType": "YulIdentifier",
                    "src": "3364:6:54"
                  },
                  "variables": [
                    {
                      "name": "pos",
                      "nodeType": "YulTypedName",
                      "src": "3357:3:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3379:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "3399:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "3393:5:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3393:13:54"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "3383:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "tail_1",
                        "nodeType": "YulIdentifier",
                        "src": "3422:6:54"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "3430:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3415:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3415:22:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3415:22:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3446:25:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3457:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3468:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3453:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3453:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "pos",
                      "nodeType": "YulIdentifier",
                      "src": "3446:3:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3480:29:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "3498:6:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "3506:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3494:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3494:15:54"
                  },
                  "variables": [
                    {
                      "name": "srcPtr",
                      "nodeType": "YulTypedName",
                      "src": "3484:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3518:10:54",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "3527:1:54",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "i",
                      "nodeType": "YulTypedName",
                      "src": "3522:1:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3586:120:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "pos",
                              "nodeType": "YulIdentifier",
                              "src": "3607:3:54"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulIdentifier",
                                  "src": "3618:6:54"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "3612:5:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3612:13:54"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "3600:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3600:26:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3600:26:54"
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "3639:19:54",
                        "value": {
                          "arguments": [
                            {
                              "name": "pos",
                              "nodeType": "YulIdentifier",
                              "src": "3650:3:54"
                            },
                            {
                              "name": "_1",
                              "nodeType": "YulIdentifier",
                              "src": "3655:2:54"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "3646:3:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3646:12:54"
                        },
                        "variableNames": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "3639:3:54"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "3671:25:54",
                        "value": {
                          "arguments": [
                            {
                              "name": "srcPtr",
                              "nodeType": "YulIdentifier",
                              "src": "3685:6:54"
                            },
                            {
                              "name": "_1",
                              "nodeType": "YulIdentifier",
                              "src": "3693:2:54"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "3681:3:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3681:15:54"
                        },
                        "variableNames": [
                          {
                            "name": "srcPtr",
                            "nodeType": "YulIdentifier",
                            "src": "3671:6:54"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "3548:1:54"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "3551:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "3545:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3545:13:54"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "3559:18:54",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "3561:14:54",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nodeType": "YulIdentifier",
                              "src": "3570:1:54"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3573:1:54",
                              "type": "",
                              "value": "1"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "3566:3:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3566:9:54"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "3561:1:54"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "3541:3:54",
                    "statements": []
                  },
                  "src": "3537:169:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3715:11:54",
                  "value": {
                    "name": "pos",
                    "nodeType": "YulIdentifier",
                    "src": "3723:3:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "3715:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_array$_t_bytes32_$dyn_memory_ptr__to_t_array$_t_bytes32_$dyn_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3220:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3231:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "3242:4:54",
                "type": ""
              }
            ],
            "src": "3100:632:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3786:124:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "3796:29:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "3818:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3805:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3805:20:54"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "3796:5:54"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3888:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3897:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3900:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3890:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3890:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3890:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "3847:5:54"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "3858:5:54"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3873:3:54",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3878:1:54",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "3869:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3869:11:54"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3882:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "3865:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3865:19:54"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "3854:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3854:31:54"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "3844:2:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3844:42:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "3837:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3837:50:54"
                  },
                  "nodeType": "YulIf",
                  "src": "3834:70:54"
                }
              ]
            },
            "name": "abi_decode_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "3765:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "3776:5:54",
                "type": ""
              }
            ],
            "src": "3737:173:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3947:95:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3964:1:54",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3971:3:54",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3976:10:54",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "3967:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3967:20:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3957:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3957:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3957:31:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4004:1:54",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4007:4:54",
                        "type": "",
                        "value": "0x41"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3997:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3997:15:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3997:15:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4028:1:54",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4031:4:54",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "4021:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4021:15:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4021:15:54"
                }
              ]
            },
            "name": "panic_error_0x41",
            "nodeType": "YulFunctionDefinition",
            "src": "3915:127:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4121:557:54",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4131:28:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4149:2:54",
                            "type": "",
                            "value": "64"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4153:1:54",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "4145:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4145:10:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4157:1:54",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "4141:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4141:18:54"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "4135:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4186:22:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nodeType": "YulIdentifier",
                            "src": "4188:16:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4188:18:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4188:18:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "4174:6:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "4182:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "4171:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4171:14:54"
                  },
                  "nodeType": "YulIf",
                  "src": "4168:40:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4217:17:54",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4231:2:54",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "not",
                      "nodeType": "YulIdentifier",
                      "src": "4227:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4227:7:54"
                  },
                  "variables": [
                    {
                      "name": "_2",
                      "nodeType": "YulTypedName",
                      "src": "4221:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4243:23:54",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4263:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "4257:5:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4257:9:54"
                  },
                  "variables": [
                    {
                      "name": "memPtr",
                      "nodeType": "YulTypedName",
                      "src": "4247:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4275:73:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "memPtr",
                        "nodeType": "YulIdentifier",
                        "src": "4297:6:54"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "4321:6:54"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4329:2:54",
                                        "type": "",
                                        "value": "31"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4317:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4317:15:54"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "4334:2:54"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "4313:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4313:24:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "4339:2:54",
                                "type": "",
                                "value": "63"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "4309:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4309:33:54"
                          },
                          {
                            "name": "_2",
                            "nodeType": "YulIdentifier",
                            "src": "4344:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "4305:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4305:42:54"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "4293:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4293:55:54"
                  },
                  "variables": [
                    {
                      "name": "newFreePtr",
                      "nodeType": "YulTypedName",
                      "src": "4279:10:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4407:22:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nodeType": "YulIdentifier",
                            "src": "4409:16:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4409:18:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4409:18:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nodeType": "YulIdentifier",
                            "src": "4366:10:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "4378:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "4363:2:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4363:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nodeType": "YulIdentifier",
                            "src": "4386:10:54"
                          },
                          {
                            "name": "memPtr",
                            "nodeType": "YulIdentifier",
                            "src": "4398:6:54"
                          }
                        ],
                        "functionName": {
                          "name": "lt",
                          "nodeType": "YulIdentifier",
                          "src": "4383:2:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4383:22:54"
                      }
                    ],
                    "functionName": {
                      "name": "or",
                      "nodeType": "YulIdentifier",
                      "src": "4360:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4360:46:54"
                  },
                  "nodeType": "YulIf",
                  "src": "4357:72:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4445:2:54",
                        "type": "",
                        "value": "64"
                      },
                      {
                        "name": "newFreePtr",
                        "nodeType": "YulIdentifier",
                        "src": "4449:10:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4438:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4438:22:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4438:22:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4469:15:54",
                  "value": {
                    "name": "memPtr",
                    "nodeType": "YulIdentifier",
                    "src": "4478:6:54"
                  },
                  "variableNames": [
                    {
                      "name": "array",
                      "nodeType": "YulIdentifier",
                      "src": "4469:5:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "memPtr",
                        "nodeType": "YulIdentifier",
                        "src": "4500:6:54"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "4508:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4493:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4493:22:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4493:22:54"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4553:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4562:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4565:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4555:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4555:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4555:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "src",
                            "nodeType": "YulIdentifier",
                            "src": "4534:3:54"
                          },
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "4539:6:54"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4530:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4530:16:54"
                      },
                      {
                        "name": "end",
                        "nodeType": "YulIdentifier",
                        "src": "4548:3:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "4527:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4527:25:54"
                  },
                  "nodeType": "YulIf",
                  "src": "4524:45:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulIdentifier",
                            "src": "4595:6:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4603:4:54",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4591:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4591:17:54"
                      },
                      {
                        "name": "src",
                        "nodeType": "YulIdentifier",
                        "src": "4610:3:54"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "4615:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldatacopy",
                      "nodeType": "YulIdentifier",
                      "src": "4578:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4578:44:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4578:44:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "memPtr",
                                "nodeType": "YulIdentifier",
                                "src": "4646:6:54"
                              },
                              {
                                "name": "length",
                                "nodeType": "YulIdentifier",
                                "src": "4654:6:54"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "4642:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4642:19:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4663:4:54",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4638:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4638:30:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4670:1:54",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4631:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4631:41:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4631:41:54"
                }
              ]
            },
            "name": "abi_decode_available_length_bytes",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "src",
                "nodeType": "YulTypedName",
                "src": "4090:3:54",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "4095:6:54",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "4103:3:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "array",
                "nodeType": "YulTypedName",
                "src": "4111:5:54",
                "type": ""
              }
            ],
            "src": "4047:631:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4735:168:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4784:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4793:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4796:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4786:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4786:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4786:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "4763:6:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "4771:4:54",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "4759:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4759:17:54"
                          },
                          {
                            "name": "end",
                            "nodeType": "YulIdentifier",
                            "src": "4778:3:54"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "4755:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4755:27:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "4748:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4748:35:54"
                  },
                  "nodeType": "YulIf",
                  "src": "4745:55:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4809:88:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "4856:6:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4864:4:54",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4852:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4852:17:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "4884:6:54"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "4871:12:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4871:20:54"
                      },
                      {
                        "name": "end",
                        "nodeType": "YulIdentifier",
                        "src": "4893:3:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_available_length_bytes",
                      "nodeType": "YulIdentifier",
                      "src": "4818:33:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4818:79:54"
                  },
                  "variableNames": [
                    {
                      "name": "array",
                      "nodeType": "YulIdentifier",
                      "src": "4809:5:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_bytes",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "4709:6:54",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "4717:3:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "array",
                "nodeType": "YulTypedName",
                "src": "4725:5:54",
                "type": ""
              }
            ],
            "src": "4683:220:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5091:897:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5138:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5147:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5150:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "5140:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5140:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5140:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "5112:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5121:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "5108:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5108:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5133:3:54",
                        "type": "",
                        "value": "192"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "5104:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5104:33:54"
                  },
                  "nodeType": "YulIf",
                  "src": "5101:53:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5163:33:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5186:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "5173:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5173:23:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "5163:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5205:42:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5232:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5243:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5228:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5228:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "5215:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5215:32:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "5205:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5256:48:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5289:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5300:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5285:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5285:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "5266:18:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5266:38:54"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "5256:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5313:46:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5344:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5355:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5340:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5340:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "5327:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5327:32:54"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "5317:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5368:28:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5386:2:54",
                            "type": "",
                            "value": "64"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5390:1:54",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "5382:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5382:10:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5394:1:54",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "5378:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5378:18:54"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "5372:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5423:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5432:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5435:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "5425:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5425:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5425:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "5411:6:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "5419:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "5408:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5408:14:54"
                  },
                  "nodeType": "YulIf",
                  "src": "5405:34:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5448:59:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5479:9:54"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "5490:6:54"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5475:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5475:22:54"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "5499:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_bytes",
                      "nodeType": "YulIdentifier",
                      "src": "5458:16:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5458:49:54"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "5448:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5516:49:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5549:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5560:3:54",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5545:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5545:19:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "5532:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5532:33:54"
                  },
                  "variables": [
                    {
                      "name": "offset_1",
                      "nodeType": "YulTypedName",
                      "src": "5520:8:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5594:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5603:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5606:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "5596:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5596:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5596:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset_1",
                        "nodeType": "YulIdentifier",
                        "src": "5580:8:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "5590:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "5577:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5577:16:54"
                  },
                  "nodeType": "YulIf",
                  "src": "5574:36:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5619:61:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5650:9:54"
                          },
                          {
                            "name": "offset_1",
                            "nodeType": "YulIdentifier",
                            "src": "5661:8:54"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5646:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5646:24:54"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "5672:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_bytes",
                      "nodeType": "YulIdentifier",
                      "src": "5629:16:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5629:51:54"
                  },
                  "variableNames": [
                    {
                      "name": "value4",
                      "nodeType": "YulIdentifier",
                      "src": "5619:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5689:49:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5722:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5733:3:54",
                            "type": "",
                            "value": "160"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5718:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5718:19:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "5705:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5705:33:54"
                  },
                  "variables": [
                    {
                      "name": "offset_2",
                      "nodeType": "YulTypedName",
                      "src": "5693:8:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5767:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5776:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5779:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "5769:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5769:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5769:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset_2",
                        "nodeType": "YulIdentifier",
                        "src": "5753:8:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "5763:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "5750:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5750:16:54"
                  },
                  "nodeType": "YulIf",
                  "src": "5747:36:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5792:34:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5806:9:54"
                      },
                      {
                        "name": "offset_2",
                        "nodeType": "YulIdentifier",
                        "src": "5817:8:54"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "5802:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5802:24:54"
                  },
                  "variables": [
                    {
                      "name": "_2",
                      "nodeType": "YulTypedName",
                      "src": "5796:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5874:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5883:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5886:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "5876:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5876:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5876:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "_2",
                                "nodeType": "YulIdentifier",
                                "src": "5853:2:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "5857:4:54",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "5849:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5849:13:54"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "5864:7:54"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "5845:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5845:27:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "5838:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5838:35:54"
                  },
                  "nodeType": "YulIf",
                  "src": "5835:55:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5899:83:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "_2",
                            "nodeType": "YulIdentifier",
                            "src": "5947:2:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5951:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5943:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5943:11:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "_2",
                            "nodeType": "YulIdentifier",
                            "src": "5969:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "5956:12:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5956:16:54"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "5974:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_available_length_bytes",
                      "nodeType": "YulIdentifier",
                      "src": "5909:33:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5909:73:54"
                  },
                  "variableNames": [
                    {
                      "name": "value5",
                      "nodeType": "YulIdentifier",
                      "src": "5899:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint256t_uint256t_addresst_bytes_memory_ptrt_bytes_memory_ptrt_string_memory_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5017:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "5028:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5040:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "5048:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "5056:6:54",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "5064:6:54",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "5072:6:54",
                "type": ""
              },
              {
                "name": "value5",
                "nodeType": "YulTypedName",
                "src": "5080:6:54",
                "type": ""
              }
            ],
            "src": "4908:1080:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6094:76:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "6104:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6116:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6127:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "6112:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6112:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "6104:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6146:9:54"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "6157:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6139:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6139:25:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6139:25:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "6063:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "6074:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "6085:4:54",
                "type": ""
              }
            ],
            "src": "5993:177:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6288:349:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6334:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6343:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6346:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6336:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6336:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6336:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "6309:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6318:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "6305:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6305:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6330:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "6301:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6301:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "6298:52:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6359:39:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6388:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "6369:18:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6369:29:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "6359:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6407:42:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6434:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6445:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6430:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6430:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "6417:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6417:32:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "6407:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6458:46:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6489:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6500:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6485:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6485:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "6472:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6472:32:54"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "6462:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6547:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6556:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6559:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6549:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6549:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6549:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "6519:6:54"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6535:2:54",
                                "type": "",
                                "value": "64"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6539:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nodeType": "YulIdentifier",
                              "src": "6531:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "6531:10:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6543:1:54",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "6527:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6527:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "6516:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6516:30:54"
                  },
                  "nodeType": "YulIf",
                  "src": "6513:50:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6572:59:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6603:9:54"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "6614:6:54"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6599:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6599:22:54"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "6623:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_bytes",
                      "nodeType": "YulIdentifier",
                      "src": "6582:16:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6582:49:54"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "6572:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_uint256t_bytes_memory_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "6238:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "6249:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "6261:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "6269:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "6277:6:54",
                "type": ""
              }
            ],
            "src": "6175:462:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6743:76:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "6753:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6765:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6776:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "6761:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6761:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "6753:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6795:9:54"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "6806:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6788:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6788:25:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6788:25:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "6712:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "6723:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "6734:4:54",
                "type": ""
              }
            ],
            "src": "6642:177:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6894:116:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6940:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6949:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6952:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6942:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6942:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6942:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "6915:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6924:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "6911:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6911:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6936:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "6907:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6907:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "6904:52:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6965:39:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6994:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "6975:18:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6975:29:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "6965:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "6860:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "6871:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "6883:6:54",
                "type": ""
              }
            ],
            "src": "6824:186:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7312:488:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7329:9:54"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "7340:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7322:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7322:25:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7322:25:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7367:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7378:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7363:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7363:18:54"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "7383:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7356:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7356:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7356:34:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7410:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7421:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7406:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7406:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value2",
                            "nodeType": "YulIdentifier",
                            "src": "7430:6:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7446:3:54",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7451:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "7442:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7442:11:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7455:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "7438:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7438:19:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "7426:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7426:32:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7399:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7399:60:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7399:60:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7479:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7490:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7475:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7475:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7495:3:54",
                        "type": "",
                        "value": "192"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7468:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7468:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7468:31:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7508:60:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "7540:6:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7552:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7563:3:54",
                            "type": "",
                            "value": "192"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7548:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7548:19:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_string",
                      "nodeType": "YulIdentifier",
                      "src": "7522:17:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7522:46:54"
                  },
                  "variables": [
                    {
                      "name": "tail_1",
                      "nodeType": "YulTypedName",
                      "src": "7512:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7588:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7599:3:54",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7584:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7584:19:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail_1",
                            "nodeType": "YulIdentifier",
                            "src": "7609:6:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7617:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "7605:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7605:22:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7577:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7577:51:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7577:51:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7637:47:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value4",
                        "nodeType": "YulIdentifier",
                        "src": "7669:6:54"
                      },
                      {
                        "name": "tail_1",
                        "nodeType": "YulIdentifier",
                        "src": "7677:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_string",
                      "nodeType": "YulIdentifier",
                      "src": "7651:17:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7651:33:54"
                  },
                  "variables": [
                    {
                      "name": "tail_2",
                      "nodeType": "YulTypedName",
                      "src": "7641:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7704:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7715:3:54",
                            "type": "",
                            "value": "160"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7700:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7700:19:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail_2",
                            "nodeType": "YulIdentifier",
                            "src": "7725:6:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7733:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "7721:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7721:22:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7693:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7693:51:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7693:51:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7753:41:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value5",
                        "nodeType": "YulIdentifier",
                        "src": "7779:6:54"
                      },
                      {
                        "name": "tail_2",
                        "nodeType": "YulIdentifier",
                        "src": "7787:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_string",
                      "nodeType": "YulIdentifier",
                      "src": "7761:17:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7761:33:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "7753:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint256_t_uint256_t_address_t_bytes_memory_ptr_t_bytes_memory_ptr_t_string_memory_ptr__to_t_uint256_t_uint256_t_address_t_bytes_memory_ptr_t_bytes_memory_ptr_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "7241:9:54",
                "type": ""
              },
              {
                "name": "value5",
                "nodeType": "YulTypedName",
                "src": "7252:6:54",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "7260:6:54",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "7268:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "7276:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "7284:6:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "7292:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "7303:4:54",
                "type": ""
              }
            ],
            "src": "7015:785:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7956:110:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7973:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7984:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7966:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7966:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7966:21:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7996:64:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "8033:6:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8045:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8056:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8041:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8041:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_array_uint256_dyn",
                      "nodeType": "YulIdentifier",
                      "src": "8004:28:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8004:56:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "7996:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "7925:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "7936:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "7947:4:54",
                "type": ""
              }
            ],
            "src": "7805:261:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8245:241:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8262:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8273:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8255:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8255:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8255:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8296:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8307:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8292:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8292:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8312:2:54",
                        "type": "",
                        "value": "51"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8285:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8285:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8285:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8335:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8346:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8331:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8331:18:54"
                      },
                      {
                        "hexValue": "496e746572616374696e67207769746820746865206c69627261727920636f6e",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "8351:34:54",
                        "type": "",
                        "value": "Interacting with the library con"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8324:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8324:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8324:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8406:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8417:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8402:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8402:18:54"
                      },
                      {
                        "hexValue": "747261637420697320666f7262696464656e2e",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "8422:21:54",
                        "type": "",
                        "value": "tract is forbidden."
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8395:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8395:49:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8395:49:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8453:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8465:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8476:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "8461:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8461:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "8453:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_3c5bfa18ac85c8d1f4d8c63a7d33e2c24b63b20654ca46146bece560cc5642df__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "8222:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "8236:4:54",
                "type": ""
              }
            ],
            "src": "8071:415:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8592:102:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "8602:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8614:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8625:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "8610:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8610:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "8602:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8644:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "8659:6:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8675:3:54",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8680:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "8671:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8671:11:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8684:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "8667:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8667:19:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "8655:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8655:32:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8637:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8637:51:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8637:51:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "8561:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "8572:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "8583:4:54",
                "type": ""
              }
            ],
            "src": "8491:203:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8873:238:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8890:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8901:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8883:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8883:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8883:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8924:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8935:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8920:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8920:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8940:2:54",
                        "type": "",
                        "value": "48"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8913:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8913:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8913:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8963:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8974:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8959:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8959:18:54"
                      },
                      {
                        "hexValue": "5065726d697373696f6e733a2053656e64657220646f6573206e6f7420686176",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "8979:34:54",
                        "type": "",
                        "value": "Permissions: Sender does not hav"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8952:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8952:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8952:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9034:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9045:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9030:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9030:18:54"
                      },
                      {
                        "hexValue": "65206d616e6167656d656e74206b6579",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "9050:18:54",
                        "type": "",
                        "value": "e management key"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9023:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9023:46:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9023:46:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9078:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "9090:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9101:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "9086:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9086:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "9078:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_6f6b3247450dc94fc6574303b07d6b95320782b0ece8a8d742601c64b874e995__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "8850:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "8864:4:54",
                "type": ""
              }
            ],
            "src": "8699:412:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9148:95:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9165:1:54",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9172:3:54",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9177:10:54",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "9168:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9168:20:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9158:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9158:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9158:31:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9205:1:54",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9208:4:54",
                        "type": "",
                        "value": "0x32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9198:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9198:15:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9198:15:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9229:1:54",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9232:4:54",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "9222:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9222:15:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9222:15:54"
                }
              ]
            },
            "name": "panic_error_0x32",
            "nodeType": "YulFunctionDefinition",
            "src": "9116:127:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9422:223:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "9439:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9450:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9432:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9432:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9432:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9473:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9484:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9469:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9469:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9489:2:54",
                        "type": "",
                        "value": "33"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9462:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9462:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9462:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9512:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9523:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9508:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9508:18:54"
                      },
                      {
                        "hexValue": "436f6e666c6963743a204b657920616c72656164792068617320707572706f73",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "9528:34:54",
                        "type": "",
                        "value": "Conflict: Key already has purpos"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9501:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9501:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9501:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9583:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9594:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9579:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9579:18:54"
                      },
                      {
                        "hexValue": "65",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "9599:3:54",
                        "type": "",
                        "value": "e"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9572:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9572:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9572:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9612:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "9624:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9635:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "9620:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9620:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "9612:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_ced1bafc369b7e2b0ca5f6ed9c6c1eb753593d516580b4f3f74fc55e230be91e__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "9399:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "9413:4:54",
                "type": ""
              }
            ],
            "src": "9248:397:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9682:95:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9699:1:54",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9706:3:54",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9711:10:54",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "9702:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9702:20:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9692:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9692:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9692:31:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9739:1:54",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9742:4:54",
                        "type": "",
                        "value": "0x11"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9732:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9732:15:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9732:15:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9763:1:54",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9766:4:54",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "9756:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9756:15:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9756:15:54"
                }
              ]
            },
            "name": "panic_error_0x11",
            "nodeType": "YulFunctionDefinition",
            "src": "9650:127:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9829:88:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9860:22:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "9862:16:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9862:18:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9862:18:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "9845:5:54"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9856:1:54",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "not",
                          "nodeType": "YulIdentifier",
                          "src": "9852:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9852:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "eq",
                      "nodeType": "YulIdentifier",
                      "src": "9842:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9842:17:54"
                  },
                  "nodeType": "YulIf",
                  "src": "9839:43:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9891:20:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "9902:5:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9909:1:54",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "9898:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9898:13:54"
                  },
                  "variableNames": [
                    {
                      "name": "ret",
                      "nodeType": "YulIdentifier",
                      "src": "9891:3:54"
                    }
                  ]
                }
              ]
            },
            "name": "increment_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "9811:5:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "ret",
                "nodeType": "YulTypedName",
                "src": "9821:3:54",
                "type": ""
              }
            ],
            "src": "9782:135:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10096:233:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10113:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10124:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10106:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10106:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10106:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10147:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10158:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10143:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10143:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10163:2:54",
                        "type": "",
                        "value": "43"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10136:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10136:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10136:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10186:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10197:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10182:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10182:18:54"
                      },
                      {
                        "hexValue": "5065726d697373696f6e733a2053656e64657220646f6573206e6f7420686176",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "10202:34:54",
                        "type": "",
                        "value": "Permissions: Sender does not hav"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10175:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10175:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10175:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10257:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10268:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10253:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10253:18:54"
                      },
                      {
                        "hexValue": "6520434c41494d206b6579",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "10273:13:54",
                        "type": "",
                        "value": "e CLAIM key"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10246:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10246:41:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10246:41:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10296:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10308:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10319:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "10304:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10304:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "10296:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_86f6f17a299db15bd5520d80701f10acbd3f85058227676cf3a946fcbf6dc7be__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "10073:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "10087:4:54",
                "type": ""
              }
            ],
            "src": "9922:407:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10508:233:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10525:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10536:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10518:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10518:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10518:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10559:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10570:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10555:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10555:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10575:2:54",
                        "type": "",
                        "value": "43"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10548:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10548:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10548:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10598:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10609:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10594:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10594:18:54"
                      },
                      {
                        "hexValue": "4e6f6e4578697374696e673a205468657265206973206e6f20636c61696d2077",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "10614:34:54",
                        "type": "",
                        "value": "NonExisting: There is no claim w"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10587:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10587:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10587:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10669:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10680:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10665:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10665:18:54"
                      },
                      {
                        "hexValue": "6974682074686973204944",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "10685:13:54",
                        "type": "",
                        "value": "ith this ID"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10658:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10658:41:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10658:41:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10708:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10720:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10731:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "10716:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10716:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "10708:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_5abac270f6dfe9fec0cffc69c1e2c0be20d5e956877e37120e8a684061fa199a__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "10485:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "10499:4:54",
                "type": ""
              }
            ],
            "src": "10334:407:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10795:79:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "10805:17:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "10817:1:54"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "10820:1:54"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "10813:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10813:9:54"
                  },
                  "variableNames": [
                    {
                      "name": "diff",
                      "nodeType": "YulIdentifier",
                      "src": "10805:4:54"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "10846:22:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "10848:16:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "10848:18:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "10848:18:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "diff",
                        "nodeType": "YulIdentifier",
                        "src": "10837:4:54"
                      },
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "10843:1:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "10834:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10834:11:54"
                  },
                  "nodeType": "YulIf",
                  "src": "10831:37:54"
                }
              ]
            },
            "name": "checked_sub_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "10777:1:54",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "10780:1:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "diff",
                "nodeType": "YulTypedName",
                "src": "10786:4:54",
                "type": ""
              }
            ],
            "src": "10746:128:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10911:95:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10928:1:54",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10935:3:54",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10940:10:54",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "10931:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10931:20:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10921:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10921:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10921:31:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10968:1:54",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10971:4:54",
                        "type": "",
                        "value": "0x31"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10961:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10961:15:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10961:15:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10992:1:54",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10995:4:54",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "10985:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10985:15:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10985:15:54"
                }
              ]
            },
            "name": "panic_error_0x31",
            "nodeType": "YulFunctionDefinition",
            "src": "10879:127:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11066:325:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "11076:22:54",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11090:1:54",
                        "type": "",
                        "value": "1"
                      },
                      {
                        "name": "data",
                        "nodeType": "YulIdentifier",
                        "src": "11093:4:54"
                      }
                    ],
                    "functionName": {
                      "name": "shr",
                      "nodeType": "YulIdentifier",
                      "src": "11086:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11086:12:54"
                  },
                  "variableNames": [
                    {
                      "name": "length",
                      "nodeType": "YulIdentifier",
                      "src": "11076:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "11107:38:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "data",
                        "nodeType": "YulIdentifier",
                        "src": "11137:4:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11143:1:54",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "11133:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11133:12:54"
                  },
                  "variables": [
                    {
                      "name": "outOfPlaceEncoding",
                      "nodeType": "YulTypedName",
                      "src": "11111:18:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "11184:31:54",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "11186:27:54",
                        "value": {
                          "arguments": [
                            {
                              "name": "length",
                              "nodeType": "YulIdentifier",
                              "src": "11200:6:54"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "11208:4:54",
                              "type": "",
                              "value": "0x7f"
                            }
                          ],
                          "functionName": {
                            "name": "and",
                            "nodeType": "YulIdentifier",
                            "src": "11196:3:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "11196:17:54"
                        },
                        "variableNames": [
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "11186:6:54"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "outOfPlaceEncoding",
                        "nodeType": "YulIdentifier",
                        "src": "11164:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "11157:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11157:26:54"
                  },
                  "nodeType": "YulIf",
                  "src": "11154:61:54"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "11274:111:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "11295:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "11302:3:54",
                                  "type": "",
                                  "value": "224"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "11307:10:54",
                                  "type": "",
                                  "value": "0x4e487b71"
                                }
                              ],
                              "functionName": {
                                "name": "shl",
                                "nodeType": "YulIdentifier",
                                "src": "11298:3:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "11298:20:54"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "11288:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "11288:31:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "11288:31:54"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "11339:1:54",
                              "type": "",
                              "value": "4"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "11342:4:54",
                              "type": "",
                              "value": "0x22"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "11332:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "11332:15:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "11332:15:54"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "11367:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "11370:4:54",
                              "type": "",
                              "value": "0x24"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "11360:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "11360:15:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "11360:15:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "outOfPlaceEncoding",
                        "nodeType": "YulIdentifier",
                        "src": "11230:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "11253:6:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11261:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "lt",
                          "nodeType": "YulIdentifier",
                          "src": "11250:2:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11250:14:54"
                      }
                    ],
                    "functionName": {
                      "name": "eq",
                      "nodeType": "YulIdentifier",
                      "src": "11227:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11227:38:54"
                  },
                  "nodeType": "YulIf",
                  "src": "11224:161:54"
                }
              ]
            },
            "name": "extract_byte_array_length",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "data",
                "nodeType": "YulTypedName",
                "src": "11046:4:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "11055:6:54",
                "type": ""
              }
            ],
            "src": "11011:380:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11451:65:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11468:1:54",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "name": "ptr",
                        "nodeType": "YulIdentifier",
                        "src": "11471:3:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11461:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11461:14:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11461:14:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "11484:26:54",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11502:1:54",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11505:4:54",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "keccak256",
                      "nodeType": "YulIdentifier",
                      "src": "11492:9:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11492:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "data",
                      "nodeType": "YulIdentifier",
                      "src": "11484:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "array_dataslot_bytes_storage",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "ptr",
                "nodeType": "YulTypedName",
                "src": "11434:3:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "data",
                "nodeType": "YulTypedName",
                "src": "11442:4:54",
                "type": ""
              }
            ],
            "src": "11396:120:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11578:714:54",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "11588:29:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "11611:5:54"
                      }
                    ],
                    "functionName": {
                      "name": "sload",
                      "nodeType": "YulIdentifier",
                      "src": "11605:5:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11605:12:54"
                  },
                  "variables": [
                    {
                      "name": "slotValue",
                      "nodeType": "YulTypedName",
                      "src": "11592:9:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "11626:50:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "slotValue",
                        "nodeType": "YulIdentifier",
                        "src": "11666:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "extract_byte_array_length",
                      "nodeType": "YulIdentifier",
                      "src": "11640:25:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11640:36:54"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "11630:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "11692:3:54"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "11697:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11685:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11685:19:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11685:19:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "11713:14:54",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "11723:4:54",
                    "type": "",
                    "value": "0x20"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "11717:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "11736:11:54",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "11746:1:54",
                    "type": "",
                    "value": "1"
                  },
                  "variables": [
                    {
                      "name": "_2",
                      "nodeType": "YulTypedName",
                      "src": "11740:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "cases": [
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "11797:139:54",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "pos",
                                      "nodeType": "YulIdentifier",
                                      "src": "11822:3:54"
                                    },
                                    {
                                      "name": "_1",
                                      "nodeType": "YulIdentifier",
                                      "src": "11827:2:54"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "11818:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "11818:12:54"
                                },
                                {
                                  "arguments": [
                                    {
                                      "name": "slotValue",
                                      "nodeType": "YulIdentifier",
                                      "src": "11836:9:54"
                                    },
                                    {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11851:3:54",
                                          "type": "",
                                          "value": "255"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "not",
                                        "nodeType": "YulIdentifier",
                                        "src": "11847:3:54"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11847:8:54"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "and",
                                    "nodeType": "YulIdentifier",
                                    "src": "11832:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "11832:24:54"
                                }
                              ],
                              "functionName": {
                                "name": "mstore",
                                "nodeType": "YulIdentifier",
                                "src": "11811:6:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "11811:46:54"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "11811:46:54"
                          },
                          {
                            "nodeType": "YulAssignment",
                            "src": "11870:56:54",
                            "value": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "pos",
                                      "nodeType": "YulIdentifier",
                                      "src": "11885:3:54"
                                    },
                                    {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11894:1:54",
                                          "type": "",
                                          "value": "5"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "length",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "11911:6:54"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "iszero",
                                                "nodeType": "YulIdentifier",
                                                "src": "11904:6:54"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "11904:14:54"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "iszero",
                                            "nodeType": "YulIdentifier",
                                            "src": "11897:6:54"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "11897:22:54"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "shl",
                                        "nodeType": "YulIdentifier",
                                        "src": "11890:3:54"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11890:30:54"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "11881:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "11881:40:54"
                                },
                                {
                                  "name": "_1",
                                  "nodeType": "YulIdentifier",
                                  "src": "11923:2:54"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "11877:3:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "11877:49:54"
                            },
                            "variableNames": [
                              {
                                "name": "ret",
                                "nodeType": "YulIdentifier",
                                "src": "11870:3:54"
                              }
                            ]
                          }
                        ]
                      },
                      "nodeType": "YulCase",
                      "src": "11790:146:54",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11795:1:54",
                        "type": "",
                        "value": "0"
                      }
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "11952:334:54",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "11973:1:54",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "11976:5:54"
                                }
                              ],
                              "functionName": {
                                "name": "mstore",
                                "nodeType": "YulIdentifier",
                                "src": "11966:6:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "11966:16:54"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "11966:16:54"
                          },
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "11995:31:54",
                            "value": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "12020:1:54",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "name": "_1",
                                  "nodeType": "YulIdentifier",
                                  "src": "12023:2:54"
                                }
                              ],
                              "functionName": {
                                "name": "keccak256",
                                "nodeType": "YulIdentifier",
                                "src": "12010:9:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "12010:16:54"
                            },
                            "variables": [
                              {
                                "name": "dataPos",
                                "nodeType": "YulTypedName",
                                "src": "11999:7:54",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "12039:10:54",
                            "value": {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "12048:1:54",
                              "type": "",
                              "value": "0"
                            },
                            "variables": [
                              {
                                "name": "i",
                                "nodeType": "YulTypedName",
                                "src": "12043:1:54",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "body": {
                              "nodeType": "YulBlock",
                              "src": "12116:120:54",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "pos",
                                                "nodeType": "YulIdentifier",
                                                "src": "12149:3:54"
                                              },
                                              {
                                                "name": "i",
                                                "nodeType": "YulIdentifier",
                                                "src": "12154:1:54"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "12145:3:54"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "12145:11:54"
                                          },
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "12158:2:54"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "12141:3:54"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "12141:20:54"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "dataPos",
                                            "nodeType": "YulIdentifier",
                                            "src": "12169:7:54"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sload",
                                          "nodeType": "YulIdentifier",
                                          "src": "12163:5:54"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "12163:14:54"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mstore",
                                      "nodeType": "YulIdentifier",
                                      "src": "12134:6:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12134:44:54"
                                  },
                                  "nodeType": "YulExpressionStatement",
                                  "src": "12134:44:54"
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "12195:27:54",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "dataPos",
                                        "nodeType": "YulIdentifier",
                                        "src": "12210:7:54"
                                      },
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "12219:2:54"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12206:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12206:16:54"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "dataPos",
                                      "nodeType": "YulIdentifier",
                                      "src": "12195:7:54"
                                    }
                                  ]
                                }
                              ]
                            },
                            "condition": {
                              "arguments": [
                                {
                                  "name": "i",
                                  "nodeType": "YulIdentifier",
                                  "src": "12073:1:54"
                                },
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "12076:6:54"
                                }
                              ],
                              "functionName": {
                                "name": "lt",
                                "nodeType": "YulIdentifier",
                                "src": "12070:2:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "12070:13:54"
                            },
                            "nodeType": "YulForLoop",
                            "post": {
                              "nodeType": "YulBlock",
                              "src": "12084:19:54",
                              "statements": [
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "12086:15:54",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "12095:1:54"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "12098:2:54"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12091:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12091:10:54"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "i",
                                      "nodeType": "YulIdentifier",
                                      "src": "12086:1:54"
                                    }
                                  ]
                                }
                              ]
                            },
                            "pre": {
                              "nodeType": "YulBlock",
                              "src": "12066:3:54",
                              "statements": []
                            },
                            "src": "12062:174:54"
                          },
                          {
                            "nodeType": "YulAssignment",
                            "src": "12249:27:54",
                            "value": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "pos",
                                      "nodeType": "YulIdentifier",
                                      "src": "12264:3:54"
                                    },
                                    {
                                      "name": "i",
                                      "nodeType": "YulIdentifier",
                                      "src": "12269:1:54"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "12260:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "12260:11:54"
                                },
                                {
                                  "name": "_1",
                                  "nodeType": "YulIdentifier",
                                  "src": "12273:2:54"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "12256:3:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "12256:20:54"
                            },
                            "variableNames": [
                              {
                                "name": "ret",
                                "nodeType": "YulIdentifier",
                                "src": "12249:3:54"
                              }
                            ]
                          }
                        ]
                      },
                      "nodeType": "YulCase",
                      "src": "11945:341:54",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11950:1:54",
                        "type": "",
                        "value": "1"
                      }
                    }
                  ],
                  "expression": {
                    "arguments": [
                      {
                        "name": "slotValue",
                        "nodeType": "YulIdentifier",
                        "src": "11767:9:54"
                      },
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "11778:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "11763:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11763:18:54"
                  },
                  "nodeType": "YulSwitch",
                  "src": "11756:530:54"
                }
              ]
            },
            "name": "abi_encode_bytes_storage",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "11555:5:54",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "11562:3:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "ret",
                "nodeType": "YulTypedName",
                "src": "11570:3:54",
                "type": ""
              }
            ],
            "src": "11521:771:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "12529:395:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12546:9:54"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "12557:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12539:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12539:25:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12539:25:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12584:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12595:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12580:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12580:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12600:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12573:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12573:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12573:31:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "12613:67:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "12652:6:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12664:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12675:3:54",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12660:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12660:19:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_bytes_storage",
                      "nodeType": "YulIdentifier",
                      "src": "12627:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12627:53:54"
                  },
                  "variables": [
                    {
                      "name": "tail_1",
                      "nodeType": "YulTypedName",
                      "src": "12617:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12700:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12711:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12696:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12696:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail_1",
                            "nodeType": "YulIdentifier",
                            "src": "12720:6:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12728:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "12716:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12716:22:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12689:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12689:50:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12689:50:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "12748:54:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "12787:6:54"
                      },
                      {
                        "name": "tail_1",
                        "nodeType": "YulIdentifier",
                        "src": "12795:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_bytes_storage",
                      "nodeType": "YulIdentifier",
                      "src": "12762:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12762:40:54"
                  },
                  "variables": [
                    {
                      "name": "tail_2",
                      "nodeType": "YulTypedName",
                      "src": "12752:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12822:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12833:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12818:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12818:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail_2",
                            "nodeType": "YulIdentifier",
                            "src": "12842:6:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12850:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "12838:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12838:22:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12811:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12811:50:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12811:50:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "12870:48:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "12903:6:54"
                      },
                      {
                        "name": "tail_2",
                        "nodeType": "YulIdentifier",
                        "src": "12911:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_bytes_storage",
                      "nodeType": "YulIdentifier",
                      "src": "12878:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12878:40:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "12870:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint256_t_bytes_storage_t_bytes_storage_t_string_storage__to_t_uint256_t_bytes_memory_ptr_t_bytes_memory_ptr_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "12474:9:54",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "12485:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "12493:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "12501:6:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "12509:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "12520:4:54",
                "type": ""
              }
            ],
            "src": "12297:627:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "13103:223:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13120:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13131:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13113:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13113:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13113:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13154:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13165:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13150:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13150:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13170:2:54",
                        "type": "",
                        "value": "33"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13143:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13143:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13143:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13193:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13204:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13189:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13189:18:54"
                      },
                      {
                        "hexValue": "4e6f6e4578697374696e673a204b65792069736e277420726567697374657265",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "13209:34:54",
                        "type": "",
                        "value": "NonExisting: Key isn't registere"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13182:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13182:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13182:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13264:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13275:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13260:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13260:18:54"
                      },
                      {
                        "hexValue": "64",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "13280:3:54",
                        "type": "",
                        "value": "d"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13253:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13253:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13253:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "13293:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13305:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13316:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "13301:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13301:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "13293:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_ecf72bc49d7f73c31e2e6c0aa61a9da361706713b0b2d9f242245b62877b78d2__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "13080:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "13094:4:54",
                "type": ""
              }
            ],
            "src": "12929:397:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "13505:232:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13522:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13533:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13515:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13515:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13515:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13556:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13567:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13552:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13552:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13572:2:54",
                        "type": "",
                        "value": "42"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13545:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13545:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13545:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13595:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13606:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13591:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13591:18:54"
                      },
                      {
                        "hexValue": "4e6f6e4578697374696e673a204b657920646f65736e27742068617665207375",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "13611:34:54",
                        "type": "",
                        "value": "NonExisting: Key doesn't have su"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13584:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13584:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13584:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13666:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13677:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13662:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13662:18:54"
                      },
                      {
                        "hexValue": "636820707572706f7365",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "13682:12:54",
                        "type": "",
                        "value": "ch purpose"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13655:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13655:40:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13655:40:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "13704:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13716:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13727:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "13712:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13712:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "13704:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_c5c6d7bd64c120db0a0dc884afccd0850100d55ba7968801315e930cfbbcdba6__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "13482:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "13496:4:54",
                "type": ""
              }
            ],
            "src": "13331:406:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "13916:181:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13933:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13944:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13926:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13926:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13926:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13967:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13978:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13963:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13963:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13983:2:54",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13956:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13956:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13956:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14006:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14017:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14002:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14002:18:54"
                      },
                      {
                        "hexValue": "53656e64657220646f6573206e6f74206861766520616374696f6e206b6579",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "14022:33:54",
                        "type": "",
                        "value": "Sender does not have action key"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13995:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13995:61:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13995:61:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "14065:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "14077:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14088:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "14073:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14073:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "14065:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_2239811702909a77ce5c35bc6905c72e29655cd69df6a5b32bf74fddbc156a6c__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "13893:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "13907:4:54",
                "type": ""
              }
            ],
            "src": "13742:355:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "14252:160:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "14269:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14280:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14262:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14262:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14262:21:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "14292:60:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "14325:6:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14337:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14348:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14333:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14333:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_bytes_storage",
                      "nodeType": "YulIdentifier",
                      "src": "14300:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14300:52:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "14292:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14372:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14383:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14368:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14368:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "14392:6:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14400:4:54",
                            "type": "",
                            "value": "0xff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "14388:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14388:17:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14361:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14361:45:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14361:45:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes_storage_t_rational_0_by_1__to_t_bytes_memory_ptr_t_uint8__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "14213:9:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "14224:6:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "14232:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "14243:4:54",
                "type": ""
              }
            ],
            "src": "14102:310:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "14554:150:54",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "14564:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "14584:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "14578:5:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14578:13:54"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "14568:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "14639:6:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14647:4:54",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14635:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14635:17:54"
                      },
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "14654:3:54"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "14659:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "copy_memory_to_memory_with_cleanup",
                      "nodeType": "YulIdentifier",
                      "src": "14600:34:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14600:66:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14600:66:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "14675:23:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "14686:3:54"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "14691:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "14682:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14682:16:54"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "14675:3:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "14530:3:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "14535:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "14546:3:54",
                "type": ""
              }
            ],
            "src": "14417:287:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "14825:106:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "14842:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14853:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14835:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14835:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14835:21:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "14865:60:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "14898:6:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14910:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14921:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14906:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14906:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_bytes_storage",
                      "nodeType": "YulIdentifier",
                      "src": "14873:24:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14873:52:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "14865:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes_storage__to_t_bytes_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "14794:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "14805:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "14816:4:54",
                "type": ""
              }
            ],
            "src": "14709:222:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "15065:145:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "15075:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15087:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15098:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "15083:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15083:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "15075:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15117:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "15132:6:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15148:3:54",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15153:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "15144:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15144:11:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "15157:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "15140:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "15140:19:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "15128:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15128:32:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15110:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15110:51:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15110:51:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15181:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15192:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15177:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15177:18:54"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "15197:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15170:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15170:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15170:34:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "15026:9:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "15037:6:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "15045:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "15056:4:54",
                "type": ""
              }
            ],
            "src": "14936:274:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "15389:240:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15406:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15417:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15399:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15399:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15399:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15440:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15451:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15436:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15436:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15456:2:54",
                        "type": "",
                        "value": "50"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15429:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15429:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15429:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15479:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15490:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15475:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15475:18:54"
                      },
                      {
                        "hexValue": "5065726d697373696f6e733a2053656e64657220646f6573206e6f7420686176",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "15495:34:54",
                        "type": "",
                        "value": "Permissions: Sender does not hav"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15468:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15468:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15468:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15550:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15561:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15546:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15546:18:54"
                      },
                      {
                        "hexValue": "6520636c61696d207369676e6572206b6579",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "15566:20:54",
                        "type": "",
                        "value": "e claim signer key"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15539:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15539:48:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15539:48:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "15596:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15608:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15619:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "15604:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15604:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "15596:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_7b35df432d579b46a32d099f957987ceecae8614c49c5a100b4430714240d197__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "15366:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "15380:4:54",
                "type": ""
              }
            ],
            "src": "15215:414:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "15714:464:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "15747:425:54",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "15761:11:54",
                        "value": {
                          "kind": "number",
                          "nodeType": "YulLiteral",
                          "src": "15771:1:54",
                          "type": "",
                          "value": "0"
                        },
                        "variables": [
                          {
                            "name": "_1",
                            "nodeType": "YulTypedName",
                            "src": "15765:2:54",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "_1",
                              "nodeType": "YulIdentifier",
                              "src": "15792:2:54"
                            },
                            {
                              "name": "array",
                              "nodeType": "YulIdentifier",
                              "src": "15796:5:54"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "15785:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "15785:17:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "15785:17:54"
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "15815:31:54",
                        "value": {
                          "arguments": [
                            {
                              "name": "_1",
                              "nodeType": "YulIdentifier",
                              "src": "15837:2:54"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "15841:4:54",
                              "type": "",
                              "value": "0x20"
                            }
                          ],
                          "functionName": {
                            "name": "keccak256",
                            "nodeType": "YulIdentifier",
                            "src": "15827:9:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "15827:19:54"
                        },
                        "variables": [
                          {
                            "name": "data",
                            "nodeType": "YulTypedName",
                            "src": "15819:4:54",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "15859:57:54",
                        "value": {
                          "arguments": [
                            {
                              "name": "data",
                              "nodeType": "YulIdentifier",
                              "src": "15882:4:54"
                            },
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "15892:1:54",
                                  "type": "",
                                  "value": "5"
                                },
                                {
                                  "arguments": [
                                    {
                                      "name": "startIndex",
                                      "nodeType": "YulIdentifier",
                                      "src": "15899:10:54"
                                    },
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "15911:2:54",
                                      "type": "",
                                      "value": "31"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "15895:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "15895:19:54"
                                }
                              ],
                              "functionName": {
                                "name": "shr",
                                "nodeType": "YulIdentifier",
                                "src": "15888:3:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "15888:27:54"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "15878:3:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "15878:38:54"
                        },
                        "variables": [
                          {
                            "name": "deleteStart",
                            "nodeType": "YulTypedName",
                            "src": "15863:11:54",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "15953:23:54",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "15955:19:54",
                              "value": {
                                "name": "data",
                                "nodeType": "YulIdentifier",
                                "src": "15970:4:54"
                              },
                              "variableNames": [
                                {
                                  "name": "deleteStart",
                                  "nodeType": "YulIdentifier",
                                  "src": "15955:11:54"
                                }
                              ]
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "startIndex",
                              "nodeType": "YulIdentifier",
                              "src": "15935:10:54"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "15947:4:54",
                              "type": "",
                              "value": "0x20"
                            }
                          ],
                          "functionName": {
                            "name": "lt",
                            "nodeType": "YulIdentifier",
                            "src": "15932:2:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "15932:20:54"
                        },
                        "nodeType": "YulIf",
                        "src": "15929:47:54"
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "15989:41:54",
                        "value": {
                          "arguments": [
                            {
                              "name": "data",
                              "nodeType": "YulIdentifier",
                              "src": "16003:4:54"
                            },
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "16013:1:54",
                                  "type": "",
                                  "value": "5"
                                },
                                {
                                  "arguments": [
                                    {
                                      "name": "len",
                                      "nodeType": "YulIdentifier",
                                      "src": "16020:3:54"
                                    },
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "16025:2:54",
                                      "type": "",
                                      "value": "31"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "16016:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "16016:12:54"
                                }
                              ],
                              "functionName": {
                                "name": "shr",
                                "nodeType": "YulIdentifier",
                                "src": "16009:3:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "16009:20:54"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "15999:3:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "15999:31:54"
                        },
                        "variables": [
                          {
                            "name": "_2",
                            "nodeType": "YulTypedName",
                            "src": "15993:2:54",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "16043:24:54",
                        "value": {
                          "name": "deleteStart",
                          "nodeType": "YulIdentifier",
                          "src": "16056:11:54"
                        },
                        "variables": [
                          {
                            "name": "start",
                            "nodeType": "YulTypedName",
                            "src": "16047:5:54",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "16141:21:54",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "start",
                                    "nodeType": "YulIdentifier",
                                    "src": "16150:5:54"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "16157:2:54"
                                  }
                                ],
                                "functionName": {
                                  "name": "sstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "16143:6:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16143:17:54"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "16143:17:54"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "start",
                              "nodeType": "YulIdentifier",
                              "src": "16091:5:54"
                            },
                            {
                              "name": "_2",
                              "nodeType": "YulIdentifier",
                              "src": "16098:2:54"
                            }
                          ],
                          "functionName": {
                            "name": "lt",
                            "nodeType": "YulIdentifier",
                            "src": "16088:2:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "16088:13:54"
                        },
                        "nodeType": "YulForLoop",
                        "post": {
                          "nodeType": "YulBlock",
                          "src": "16102:26:54",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "16104:22:54",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "start",
                                    "nodeType": "YulIdentifier",
                                    "src": "16117:5:54"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "16124:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "16113:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16113:13:54"
                              },
                              "variableNames": [
                                {
                                  "name": "start",
                                  "nodeType": "YulIdentifier",
                                  "src": "16104:5:54"
                                }
                              ]
                            }
                          ]
                        },
                        "pre": {
                          "nodeType": "YulBlock",
                          "src": "16084:3:54",
                          "statements": []
                        },
                        "src": "16080:82:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "len",
                        "nodeType": "YulIdentifier",
                        "src": "15730:3:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15735:2:54",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "15727:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15727:11:54"
                  },
                  "nodeType": "YulIf",
                  "src": "15724:448:54"
                }
              ]
            },
            "name": "clean_up_bytearray_end_slots_bytes_storage",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "array",
                "nodeType": "YulTypedName",
                "src": "15686:5:54",
                "type": ""
              },
              {
                "name": "len",
                "nodeType": "YulTypedName",
                "src": "15693:3:54",
                "type": ""
              },
              {
                "name": "startIndex",
                "nodeType": "YulTypedName",
                "src": "15698:10:54",
                "type": ""
              }
            ],
            "src": "15634:544:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "16268:81:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "16278:65:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "data",
                            "nodeType": "YulIdentifier",
                            "src": "16293:4:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "16311:1:54",
                                        "type": "",
                                        "value": "3"
                                      },
                                      {
                                        "name": "len",
                                        "nodeType": "YulIdentifier",
                                        "src": "16314:3:54"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "16307:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16307:11:54"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "16324:1:54",
                                        "type": "",
                                        "value": "0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "16320:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16320:6:54"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "16303:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16303:24:54"
                              }
                            ],
                            "functionName": {
                              "name": "not",
                              "nodeType": "YulIdentifier",
                              "src": "16299:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "16299:29:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "16289:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16289:40:54"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16335:1:54",
                            "type": "",
                            "value": "1"
                          },
                          {
                            "name": "len",
                            "nodeType": "YulIdentifier",
                            "src": "16338:3:54"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "16331:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16331:11:54"
                      }
                    ],
                    "functionName": {
                      "name": "or",
                      "nodeType": "YulIdentifier",
                      "src": "16286:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16286:57:54"
                  },
                  "variableNames": [
                    {
                      "name": "used",
                      "nodeType": "YulIdentifier",
                      "src": "16278:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "extract_used_part_and_set_length_of_short_byte_array",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "data",
                "nodeType": "YulTypedName",
                "src": "16245:4:54",
                "type": ""
              },
              {
                "name": "len",
                "nodeType": "YulTypedName",
                "src": "16251:3:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "used",
                "nodeType": "YulTypedName",
                "src": "16259:4:54",
                "type": ""
              }
            ],
            "src": "16183:166:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "16448:1254:54",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "16458:24:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "src",
                        "nodeType": "YulIdentifier",
                        "src": "16478:3:54"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "16472:5:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16472:10:54"
                  },
                  "variables": [
                    {
                      "name": "newLen",
                      "nodeType": "YulTypedName",
                      "src": "16462:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "16525:22:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nodeType": "YulIdentifier",
                            "src": "16527:16:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "16527:18:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "16527:18:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "newLen",
                        "nodeType": "YulIdentifier",
                        "src": "16497:6:54"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "16513:2:54",
                                "type": "",
                                "value": "64"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "16517:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nodeType": "YulIdentifier",
                              "src": "16509:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "16509:10:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16521:1:54",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "16505:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16505:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "16494:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16494:30:54"
                  },
                  "nodeType": "YulIf",
                  "src": "16491:56:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "slot",
                        "nodeType": "YulIdentifier",
                        "src": "16599:4:54"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "slot",
                                "nodeType": "YulIdentifier",
                                "src": "16637:4:54"
                              }
                            ],
                            "functionName": {
                              "name": "sload",
                              "nodeType": "YulIdentifier",
                              "src": "16631:5:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "16631:11:54"
                          }
                        ],
                        "functionName": {
                          "name": "extract_byte_array_length",
                          "nodeType": "YulIdentifier",
                          "src": "16605:25:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16605:38:54"
                      },
                      {
                        "name": "newLen",
                        "nodeType": "YulIdentifier",
                        "src": "16645:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "clean_up_bytearray_end_slots_bytes_storage",
                      "nodeType": "YulIdentifier",
                      "src": "16556:42:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16556:96:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16556:96:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "16661:18:54",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "16678:1:54",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "srcOffset",
                      "nodeType": "YulTypedName",
                      "src": "16665:9:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "16688:23:54",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "16707:4:54",
                    "type": "",
                    "value": "0x20"
                  },
                  "variables": [
                    {
                      "name": "srcOffset_1",
                      "nodeType": "YulTypedName",
                      "src": "16692:11:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "16720:24:54",
                  "value": {
                    "name": "srcOffset_1",
                    "nodeType": "YulIdentifier",
                    "src": "16733:11:54"
                  },
                  "variableNames": [
                    {
                      "name": "srcOffset",
                      "nodeType": "YulIdentifier",
                      "src": "16720:9:54"
                    }
                  ]
                },
                {
                  "cases": [
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "16790:655:54",
                        "statements": [
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "16804:35:54",
                            "value": {
                              "arguments": [
                                {
                                  "name": "newLen",
                                  "nodeType": "YulIdentifier",
                                  "src": "16823:6:54"
                                },
                                {
                                  "arguments": [
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "16835:2:54",
                                      "type": "",
                                      "value": "31"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "not",
                                    "nodeType": "YulIdentifier",
                                    "src": "16831:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "16831:7:54"
                                }
                              ],
                              "functionName": {
                                "name": "and",
                                "nodeType": "YulIdentifier",
                                "src": "16819:3:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "16819:20:54"
                            },
                            "variables": [
                              {
                                "name": "loopEnd",
                                "nodeType": "YulTypedName",
                                "src": "16808:7:54",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "16852:48:54",
                            "value": {
                              "arguments": [
                                {
                                  "name": "slot",
                                  "nodeType": "YulIdentifier",
                                  "src": "16895:4:54"
                                }
                              ],
                              "functionName": {
                                "name": "array_dataslot_bytes_storage",
                                "nodeType": "YulIdentifier",
                                "src": "16866:28:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "16866:34:54"
                            },
                            "variables": [
                              {
                                "name": "dstPtr",
                                "nodeType": "YulTypedName",
                                "src": "16856:6:54",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "16913:10:54",
                            "value": {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "16922:1:54",
                              "type": "",
                              "value": "0"
                            },
                            "variables": [
                              {
                                "name": "i",
                                "nodeType": "YulTypedName",
                                "src": "16917:1:54",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "body": {
                              "nodeType": "YulBlock",
                              "src": "17000:172:54",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "name": "dstPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "17025:6:54"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "src",
                                                "nodeType": "YulIdentifier",
                                                "src": "17043:3:54"
                                              },
                                              {
                                                "name": "srcOffset",
                                                "nodeType": "YulIdentifier",
                                                "src": "17048:9:54"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "17039:3:54"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "17039:19:54"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mload",
                                          "nodeType": "YulIdentifier",
                                          "src": "17033:5:54"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "17033:26:54"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sstore",
                                      "nodeType": "YulIdentifier",
                                      "src": "17018:6:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17018:42:54"
                                  },
                                  "nodeType": "YulExpressionStatement",
                                  "src": "17018:42:54"
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "17077:24:54",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "dstPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "17091:6:54"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "17099:1:54",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "17087:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17087:14:54"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "dstPtr",
                                      "nodeType": "YulIdentifier",
                                      "src": "17077:6:54"
                                    }
                                  ]
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "17118:40:54",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "srcOffset",
                                        "nodeType": "YulIdentifier",
                                        "src": "17135:9:54"
                                      },
                                      {
                                        "name": "srcOffset_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "17146:11:54"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "17131:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17131:27:54"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "srcOffset",
                                      "nodeType": "YulIdentifier",
                                      "src": "17118:9:54"
                                    }
                                  ]
                                }
                              ]
                            },
                            "condition": {
                              "arguments": [
                                {
                                  "name": "i",
                                  "nodeType": "YulIdentifier",
                                  "src": "16947:1:54"
                                },
                                {
                                  "name": "loopEnd",
                                  "nodeType": "YulIdentifier",
                                  "src": "16950:7:54"
                                }
                              ],
                              "functionName": {
                                "name": "lt",
                                "nodeType": "YulIdentifier",
                                "src": "16944:2:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "16944:14:54"
                            },
                            "nodeType": "YulForLoop",
                            "post": {
                              "nodeType": "YulBlock",
                              "src": "16959:28:54",
                              "statements": [
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "16961:24:54",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "16970:1:54"
                                      },
                                      {
                                        "name": "srcOffset_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "16973:11:54"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "16966:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16966:19:54"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "i",
                                      "nodeType": "YulIdentifier",
                                      "src": "16961:1:54"
                                    }
                                  ]
                                }
                              ]
                            },
                            "pre": {
                              "nodeType": "YulBlock",
                              "src": "16940:3:54",
                              "statements": []
                            },
                            "src": "16936:236:54"
                          },
                          {
                            "body": {
                              "nodeType": "YulBlock",
                              "src": "17220:166:54",
                              "statements": [
                                {
                                  "nodeType": "YulVariableDeclaration",
                                  "src": "17238:43:54",
                                  "value": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "src",
                                            "nodeType": "YulIdentifier",
                                            "src": "17265:3:54"
                                          },
                                          {
                                            "name": "srcOffset",
                                            "nodeType": "YulIdentifier",
                                            "src": "17270:9:54"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "17261:3:54"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "17261:19:54"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "17255:5:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17255:26:54"
                                  },
                                  "variables": [
                                    {
                                      "name": "lastValue",
                                      "nodeType": "YulTypedName",
                                      "src": "17242:9:54",
                                      "type": ""
                                    }
                                  ]
                                },
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "name": "dstPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "17305:6:54"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "lastValue",
                                            "nodeType": "YulIdentifier",
                                            "src": "17317:9:54"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "arguments": [
                                                          {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "17344:1:54",
                                                            "type": "",
                                                            "value": "3"
                                                          },
                                                          {
                                                            "name": "newLen",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "17347:6:54"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "shl",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "17340:3:54"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "17340:14:54"
                                                      },
                                                      {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "17356:3:54",
                                                        "type": "",
                                                        "value": "248"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "and",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "17336:3:54"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "17336:24:54"
                                                  },
                                                  {
                                                    "arguments": [
                                                      {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "17366:1:54",
                                                        "type": "",
                                                        "value": "0"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "not",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "17362:3:54"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "17362:6:54"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "17332:3:54"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "17332:37:54"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "17328:3:54"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "17328:42:54"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "17313:3:54"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "17313:58:54"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sstore",
                                      "nodeType": "YulIdentifier",
                                      "src": "17298:6:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17298:74:54"
                                  },
                                  "nodeType": "YulExpressionStatement",
                                  "src": "17298:74:54"
                                }
                              ]
                            },
                            "condition": {
                              "arguments": [
                                {
                                  "name": "loopEnd",
                                  "nodeType": "YulIdentifier",
                                  "src": "17191:7:54"
                                },
                                {
                                  "name": "newLen",
                                  "nodeType": "YulIdentifier",
                                  "src": "17200:6:54"
                                }
                              ],
                              "functionName": {
                                "name": "lt",
                                "nodeType": "YulIdentifier",
                                "src": "17188:2:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "17188:19:54"
                            },
                            "nodeType": "YulIf",
                            "src": "17185:201:54"
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "name": "slot",
                                  "nodeType": "YulIdentifier",
                                  "src": "17406:4:54"
                                },
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "17420:1:54",
                                          "type": "",
                                          "value": "1"
                                        },
                                        {
                                          "name": "newLen",
                                          "nodeType": "YulIdentifier",
                                          "src": "17423:6:54"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "shl",
                                        "nodeType": "YulIdentifier",
                                        "src": "17416:3:54"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "17416:14:54"
                                    },
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "17432:1:54",
                                      "type": "",
                                      "value": "1"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "17412:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "17412:22:54"
                                }
                              ],
                              "functionName": {
                                "name": "sstore",
                                "nodeType": "YulIdentifier",
                                "src": "17399:6:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "17399:36:54"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "17399:36:54"
                          }
                        ]
                      },
                      "nodeType": "YulCase",
                      "src": "16783:662:54",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16788:1:54",
                        "type": "",
                        "value": "1"
                      }
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "17462:234:54",
                        "statements": [
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "17476:14:54",
                            "value": {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "17489:1:54",
                              "type": "",
                              "value": "0"
                            },
                            "variables": [
                              {
                                "name": "value",
                                "nodeType": "YulTypedName",
                                "src": "17480:5:54",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "body": {
                              "nodeType": "YulBlock",
                              "src": "17525:67:54",
                              "statements": [
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "17543:35:54",
                                  "value": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "src",
                                            "nodeType": "YulIdentifier",
                                            "src": "17562:3:54"
                                          },
                                          {
                                            "name": "srcOffset",
                                            "nodeType": "YulIdentifier",
                                            "src": "17567:9:54"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "17558:3:54"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "17558:19:54"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "17552:5:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17552:26:54"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "value",
                                      "nodeType": "YulIdentifier",
                                      "src": "17543:5:54"
                                    }
                                  ]
                                }
                              ]
                            },
                            "condition": {
                              "name": "newLen",
                              "nodeType": "YulIdentifier",
                              "src": "17506:6:54"
                            },
                            "nodeType": "YulIf",
                            "src": "17503:89:54"
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "name": "slot",
                                  "nodeType": "YulIdentifier",
                                  "src": "17612:4:54"
                                },
                                {
                                  "arguments": [
                                    {
                                      "name": "value",
                                      "nodeType": "YulIdentifier",
                                      "src": "17671:5:54"
                                    },
                                    {
                                      "name": "newLen",
                                      "nodeType": "YulIdentifier",
                                      "src": "17678:6:54"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "extract_used_part_and_set_length_of_short_byte_array",
                                    "nodeType": "YulIdentifier",
                                    "src": "17618:52:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "17618:67:54"
                                }
                              ],
                              "functionName": {
                                "name": "sstore",
                                "nodeType": "YulIdentifier",
                                "src": "17605:6:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "17605:81:54"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "17605:81:54"
                          }
                        ]
                      },
                      "nodeType": "YulCase",
                      "src": "17454:242:54",
                      "value": "default"
                    }
                  ],
                  "expression": {
                    "arguments": [
                      {
                        "name": "newLen",
                        "nodeType": "YulIdentifier",
                        "src": "16763:6:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16771:2:54",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "16760:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16760:14:54"
                  },
                  "nodeType": "YulSwitch",
                  "src": "16753:943:54"
                }
              ]
            },
            "name": "copy_byte_array_to_storage_from_t_bytes_memory_ptr_to_t_bytes_storage",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "slot",
                "nodeType": "YulTypedName",
                "src": "16433:4:54",
                "type": ""
              },
              {
                "name": "src",
                "nodeType": "YulTypedName",
                "src": "16439:3:54",
                "type": ""
              }
            ],
            "src": "16354:1348:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "17803:1254:54",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "17813:24:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "src",
                        "nodeType": "YulIdentifier",
                        "src": "17833:3:54"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "17827:5:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17827:10:54"
                  },
                  "variables": [
                    {
                      "name": "newLen",
                      "nodeType": "YulTypedName",
                      "src": "17817:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "17880:22:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nodeType": "YulIdentifier",
                            "src": "17882:16:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "17882:18:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "17882:18:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "newLen",
                        "nodeType": "YulIdentifier",
                        "src": "17852:6:54"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "17868:2:54",
                                "type": "",
                                "value": "64"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "17872:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nodeType": "YulIdentifier",
                              "src": "17864:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "17864:10:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17876:1:54",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "17860:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17860:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "17849:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17849:30:54"
                  },
                  "nodeType": "YulIf",
                  "src": "17846:56:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "slot",
                        "nodeType": "YulIdentifier",
                        "src": "17954:4:54"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "slot",
                                "nodeType": "YulIdentifier",
                                "src": "17992:4:54"
                              }
                            ],
                            "functionName": {
                              "name": "sload",
                              "nodeType": "YulIdentifier",
                              "src": "17986:5:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "17986:11:54"
                          }
                        ],
                        "functionName": {
                          "name": "extract_byte_array_length",
                          "nodeType": "YulIdentifier",
                          "src": "17960:25:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17960:38:54"
                      },
                      {
                        "name": "newLen",
                        "nodeType": "YulIdentifier",
                        "src": "18000:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "clean_up_bytearray_end_slots_bytes_storage",
                      "nodeType": "YulIdentifier",
                      "src": "17911:42:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17911:96:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17911:96:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "18016:18:54",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "18033:1:54",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "srcOffset",
                      "nodeType": "YulTypedName",
                      "src": "18020:9:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "18043:23:54",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "18062:4:54",
                    "type": "",
                    "value": "0x20"
                  },
                  "variables": [
                    {
                      "name": "srcOffset_1",
                      "nodeType": "YulTypedName",
                      "src": "18047:11:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "18075:24:54",
                  "value": {
                    "name": "srcOffset_1",
                    "nodeType": "YulIdentifier",
                    "src": "18088:11:54"
                  },
                  "variableNames": [
                    {
                      "name": "srcOffset",
                      "nodeType": "YulIdentifier",
                      "src": "18075:9:54"
                    }
                  ]
                },
                {
                  "cases": [
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "18145:655:54",
                        "statements": [
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "18159:35:54",
                            "value": {
                              "arguments": [
                                {
                                  "name": "newLen",
                                  "nodeType": "YulIdentifier",
                                  "src": "18178:6:54"
                                },
                                {
                                  "arguments": [
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "18190:2:54",
                                      "type": "",
                                      "value": "31"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "not",
                                    "nodeType": "YulIdentifier",
                                    "src": "18186:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "18186:7:54"
                                }
                              ],
                              "functionName": {
                                "name": "and",
                                "nodeType": "YulIdentifier",
                                "src": "18174:3:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "18174:20:54"
                            },
                            "variables": [
                              {
                                "name": "loopEnd",
                                "nodeType": "YulTypedName",
                                "src": "18163:7:54",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "18207:48:54",
                            "value": {
                              "arguments": [
                                {
                                  "name": "slot",
                                  "nodeType": "YulIdentifier",
                                  "src": "18250:4:54"
                                }
                              ],
                              "functionName": {
                                "name": "array_dataslot_bytes_storage",
                                "nodeType": "YulIdentifier",
                                "src": "18221:28:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "18221:34:54"
                            },
                            "variables": [
                              {
                                "name": "dstPtr",
                                "nodeType": "YulTypedName",
                                "src": "18211:6:54",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "18268:10:54",
                            "value": {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "18277:1:54",
                              "type": "",
                              "value": "0"
                            },
                            "variables": [
                              {
                                "name": "i",
                                "nodeType": "YulTypedName",
                                "src": "18272:1:54",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "body": {
                              "nodeType": "YulBlock",
                              "src": "18355:172:54",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "name": "dstPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "18380:6:54"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "src",
                                                "nodeType": "YulIdentifier",
                                                "src": "18398:3:54"
                                              },
                                              {
                                                "name": "srcOffset",
                                                "nodeType": "YulIdentifier",
                                                "src": "18403:9:54"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "18394:3:54"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "18394:19:54"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mload",
                                          "nodeType": "YulIdentifier",
                                          "src": "18388:5:54"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "18388:26:54"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sstore",
                                      "nodeType": "YulIdentifier",
                                      "src": "18373:6:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "18373:42:54"
                                  },
                                  "nodeType": "YulExpressionStatement",
                                  "src": "18373:42:54"
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "18432:24:54",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "dstPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "18446:6:54"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "18454:1:54",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "18442:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "18442:14:54"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "dstPtr",
                                      "nodeType": "YulIdentifier",
                                      "src": "18432:6:54"
                                    }
                                  ]
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "18473:40:54",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "srcOffset",
                                        "nodeType": "YulIdentifier",
                                        "src": "18490:9:54"
                                      },
                                      {
                                        "name": "srcOffset_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "18501:11:54"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "18486:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "18486:27:54"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "srcOffset",
                                      "nodeType": "YulIdentifier",
                                      "src": "18473:9:54"
                                    }
                                  ]
                                }
                              ]
                            },
                            "condition": {
                              "arguments": [
                                {
                                  "name": "i",
                                  "nodeType": "YulIdentifier",
                                  "src": "18302:1:54"
                                },
                                {
                                  "name": "loopEnd",
                                  "nodeType": "YulIdentifier",
                                  "src": "18305:7:54"
                                }
                              ],
                              "functionName": {
                                "name": "lt",
                                "nodeType": "YulIdentifier",
                                "src": "18299:2:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "18299:14:54"
                            },
                            "nodeType": "YulForLoop",
                            "post": {
                              "nodeType": "YulBlock",
                              "src": "18314:28:54",
                              "statements": [
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "18316:24:54",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "18325:1:54"
                                      },
                                      {
                                        "name": "srcOffset_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "18328:11:54"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "18321:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "18321:19:54"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "i",
                                      "nodeType": "YulIdentifier",
                                      "src": "18316:1:54"
                                    }
                                  ]
                                }
                              ]
                            },
                            "pre": {
                              "nodeType": "YulBlock",
                              "src": "18295:3:54",
                              "statements": []
                            },
                            "src": "18291:236:54"
                          },
                          {
                            "body": {
                              "nodeType": "YulBlock",
                              "src": "18575:166:54",
                              "statements": [
                                {
                                  "nodeType": "YulVariableDeclaration",
                                  "src": "18593:43:54",
                                  "value": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "src",
                                            "nodeType": "YulIdentifier",
                                            "src": "18620:3:54"
                                          },
                                          {
                                            "name": "srcOffset",
                                            "nodeType": "YulIdentifier",
                                            "src": "18625:9:54"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "18616:3:54"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "18616:19:54"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "18610:5:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "18610:26:54"
                                  },
                                  "variables": [
                                    {
                                      "name": "lastValue",
                                      "nodeType": "YulTypedName",
                                      "src": "18597:9:54",
                                      "type": ""
                                    }
                                  ]
                                },
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "name": "dstPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "18660:6:54"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "lastValue",
                                            "nodeType": "YulIdentifier",
                                            "src": "18672:9:54"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "arguments": [
                                                          {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "18699:1:54",
                                                            "type": "",
                                                            "value": "3"
                                                          },
                                                          {
                                                            "name": "newLen",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "18702:6:54"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "shl",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "18695:3:54"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "18695:14:54"
                                                      },
                                                      {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "18711:3:54",
                                                        "type": "",
                                                        "value": "248"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "and",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "18691:3:54"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "18691:24:54"
                                                  },
                                                  {
                                                    "arguments": [
                                                      {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "18721:1:54",
                                                        "type": "",
                                                        "value": "0"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "not",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "18717:3:54"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "18717:6:54"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "18687:3:54"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "18687:37:54"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "18683:3:54"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "18683:42:54"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "18668:3:54"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "18668:58:54"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sstore",
                                      "nodeType": "YulIdentifier",
                                      "src": "18653:6:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "18653:74:54"
                                  },
                                  "nodeType": "YulExpressionStatement",
                                  "src": "18653:74:54"
                                }
                              ]
                            },
                            "condition": {
                              "arguments": [
                                {
                                  "name": "loopEnd",
                                  "nodeType": "YulIdentifier",
                                  "src": "18546:7:54"
                                },
                                {
                                  "name": "newLen",
                                  "nodeType": "YulIdentifier",
                                  "src": "18555:6:54"
                                }
                              ],
                              "functionName": {
                                "name": "lt",
                                "nodeType": "YulIdentifier",
                                "src": "18543:2:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "18543:19:54"
                            },
                            "nodeType": "YulIf",
                            "src": "18540:201:54"
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "name": "slot",
                                  "nodeType": "YulIdentifier",
                                  "src": "18761:4:54"
                                },
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "18775:1:54",
                                          "type": "",
                                          "value": "1"
                                        },
                                        {
                                          "name": "newLen",
                                          "nodeType": "YulIdentifier",
                                          "src": "18778:6:54"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "shl",
                                        "nodeType": "YulIdentifier",
                                        "src": "18771:3:54"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "18771:14:54"
                                    },
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "18787:1:54",
                                      "type": "",
                                      "value": "1"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "18767:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "18767:22:54"
                                }
                              ],
                              "functionName": {
                                "name": "sstore",
                                "nodeType": "YulIdentifier",
                                "src": "18754:6:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "18754:36:54"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "18754:36:54"
                          }
                        ]
                      },
                      "nodeType": "YulCase",
                      "src": "18138:662:54",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18143:1:54",
                        "type": "",
                        "value": "1"
                      }
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "18817:234:54",
                        "statements": [
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "18831:14:54",
                            "value": {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "18844:1:54",
                              "type": "",
                              "value": "0"
                            },
                            "variables": [
                              {
                                "name": "value",
                                "nodeType": "YulTypedName",
                                "src": "18835:5:54",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "body": {
                              "nodeType": "YulBlock",
                              "src": "18880:67:54",
                              "statements": [
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "18898:35:54",
                                  "value": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "src",
                                            "nodeType": "YulIdentifier",
                                            "src": "18917:3:54"
                                          },
                                          {
                                            "name": "srcOffset",
                                            "nodeType": "YulIdentifier",
                                            "src": "18922:9:54"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "18913:3:54"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "18913:19:54"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "18907:5:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "18907:26:54"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "value",
                                      "nodeType": "YulIdentifier",
                                      "src": "18898:5:54"
                                    }
                                  ]
                                }
                              ]
                            },
                            "condition": {
                              "name": "newLen",
                              "nodeType": "YulIdentifier",
                              "src": "18861:6:54"
                            },
                            "nodeType": "YulIf",
                            "src": "18858:89:54"
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "name": "slot",
                                  "nodeType": "YulIdentifier",
                                  "src": "18967:4:54"
                                },
                                {
                                  "arguments": [
                                    {
                                      "name": "value",
                                      "nodeType": "YulIdentifier",
                                      "src": "19026:5:54"
                                    },
                                    {
                                      "name": "newLen",
                                      "nodeType": "YulIdentifier",
                                      "src": "19033:6:54"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "extract_used_part_and_set_length_of_short_byte_array",
                                    "nodeType": "YulIdentifier",
                                    "src": "18973:52:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "18973:67:54"
                                }
                              ],
                              "functionName": {
                                "name": "sstore",
                                "nodeType": "YulIdentifier",
                                "src": "18960:6:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "18960:81:54"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "18960:81:54"
                          }
                        ]
                      },
                      "nodeType": "YulCase",
                      "src": "18809:242:54",
                      "value": "default"
                    }
                  ],
                  "expression": {
                    "arguments": [
                      {
                        "name": "newLen",
                        "nodeType": "YulIdentifier",
                        "src": "18118:6:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18126:2:54",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "18115:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18115:14:54"
                  },
                  "nodeType": "YulSwitch",
                  "src": "18108:943:54"
                }
              ]
            },
            "name": "copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "slot",
                "nodeType": "YulTypedName",
                "src": "17788:4:54",
                "type": ""
              },
              {
                "name": "src",
                "nodeType": "YulTypedName",
                "src": "17794:3:54",
                "type": ""
              }
            ],
            "src": "17707:1350:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "19303:374:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "19320:9:54"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "19331:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19313:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19313:25:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19313:25:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19358:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19369:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "19354:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19354:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19374:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19347:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19347:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19347:31:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "19387:60:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "19419:6:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19431:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19442:3:54",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "19427:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19427:19:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_string",
                      "nodeType": "YulIdentifier",
                      "src": "19401:17:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19401:46:54"
                  },
                  "variables": [
                    {
                      "name": "tail_1",
                      "nodeType": "YulTypedName",
                      "src": "19391:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19467:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19478:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "19463:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19463:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail_1",
                            "nodeType": "YulIdentifier",
                            "src": "19487:6:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19495:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "19483:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19483:22:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19456:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19456:50:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19456:50:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "19515:47:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "19547:6:54"
                      },
                      {
                        "name": "tail_1",
                        "nodeType": "YulIdentifier",
                        "src": "19555:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_string",
                      "nodeType": "YulIdentifier",
                      "src": "19529:17:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19529:33:54"
                  },
                  "variables": [
                    {
                      "name": "tail_2",
                      "nodeType": "YulTypedName",
                      "src": "19519:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19582:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19593:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "19578:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19578:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail_2",
                            "nodeType": "YulIdentifier",
                            "src": "19602:6:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19610:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "19598:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19598:22:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19571:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19571:50:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19571:50:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "19630:41:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "19656:6:54"
                      },
                      {
                        "name": "tail_2",
                        "nodeType": "YulIdentifier",
                        "src": "19664:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_string",
                      "nodeType": "YulIdentifier",
                      "src": "19638:17:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19638:33:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "19630:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint256_t_bytes_memory_ptr_t_bytes_memory_ptr_t_string_memory_ptr__to_t_uint256_t_bytes_memory_ptr_t_bytes_memory_ptr_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "19248:9:54",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "19259:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "19267:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "19275:6:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "19283:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "19294:4:54",
                "type": ""
              }
            ],
            "src": "19062:615:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "19856:166:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "19873:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19884:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19866:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19866:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19866:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19907:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19918:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "19903:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19903:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19923:2:54",
                        "type": "",
                        "value": "16"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19896:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19896:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19896:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19946:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19957:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "19942:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19942:18:54"
                      },
                      {
                        "hexValue": "416c7265616479206578656375746564",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "19962:18:54",
                        "type": "",
                        "value": "Already executed"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19935:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19935:46:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19935:46:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "19990:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "20002:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20013:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "19998:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19998:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "19990:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_58f47ea4e737df2d9cc4764db26c111751884cf0a1856aca9f4c66cadc811e1b__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "19833:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "19847:4:54",
                "type": ""
              }
            ],
            "src": "19682:340:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "20146:99:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "20163:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20174:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "20156:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20156:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "20156:21:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "20186:53:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "20212:6:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "20224:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "20235:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "20220:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "20220:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_string",
                      "nodeType": "YulIdentifier",
                      "src": "20194:17:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20194:45:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "20186:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "20115:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "20126:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "20137:4:54",
                "type": ""
              }
            ],
            "src": "20027:218:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "20424:180:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "20441:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20452:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "20434:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20434:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "20434:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "20475:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "20486:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "20471:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "20471:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20491:2:54",
                        "type": "",
                        "value": "30"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "20464:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20464:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "20464:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "20514:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "20525:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "20510:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "20510:18:54"
                      },
                      {
                        "hexValue": "496e697469616c206b65792077617320616c72656164792073657475702e",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "20530:32:54",
                        "type": "",
                        "value": "Initial key was already setup."
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "20503:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20503:60:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "20503:60:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "20572:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "20584:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20595:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "20580:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20580:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "20572:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_f97b6c8710e53ddda282a80ef5956d499e3405b5bb60ff3bc53f8e99e471fc0e__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "20401:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "20415:4:54",
                "type": ""
              }
            ],
            "src": "20250:354:54"
          }
        ]
      },
      "contents": "{\n    { }\n    function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_array_uint256_dyn(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let _1 := 0x20\n        pos := add(pos, _1)\n        let srcPtr := add(value, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, mload(srcPtr))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        end := pos\n    }\n    function abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_uint256_t_bytes32__to_t_array$_t_uint256_$dyn_memory_ptr_t_uint256_t_bytes32__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, 96)\n        tail := abi_encode_array_uint256_dyn(value0, add(headStart, 96))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_decode_tuple_t_bytes32t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_tuple_t_bytes32t_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function copy_memory_to_memory_with_cleanup(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n    }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_decode_tuple_t_uint256t_bool(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let value := calldataload(add(headStart, 32))\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value1 := value\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_array$_t_bytes32_$dyn_memory_ptr__to_t_array$_t_bytes32_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, mload(srcPtr))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_available_length_bytes(src, length, end) -> array\n    {\n        let _1 := sub(shl(64, 1), 1)\n        if gt(length, _1) { panic_error_0x41() }\n        let _2 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(length, 31), _2), 63), _2))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        array := memPtr\n        mstore(memPtr, length)\n        if gt(add(src, length), end) { revert(0, 0) }\n        calldatacopy(add(memPtr, 0x20), src, length)\n        mstore(add(add(memPtr, length), 0x20), 0)\n    }\n    function abi_decode_bytes(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        array := abi_decode_available_length_bytes(add(offset, 0x20), calldataload(offset), end)\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_addresst_bytes_memory_ptrt_bytes_memory_ptrt_string_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 192) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := abi_decode_address(add(headStart, 64))\n        let offset := calldataload(add(headStart, 96))\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        value3 := abi_decode_bytes(add(headStart, offset), dataEnd)\n        let offset_1 := calldataload(add(headStart, 128))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value4 := abi_decode_bytes(add(headStart, offset_1), dataEnd)\n        let offset_2 := calldataload(add(headStart, 160))\n        if gt(offset_2, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset_2)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        value5 := abi_decode_available_length_bytes(add(_2, 32), calldataload(_2), dataEnd)\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_uint256t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n        let offset := calldataload(add(headStart, 64))\n        if gt(offset, sub(shl(64, 1), 1)) { revert(0, 0) }\n        value2 := abi_decode_bytes(add(headStart, offset), dataEnd)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_address_t_bytes_memory_ptr_t_bytes_memory_ptr_t_string_memory_ptr__to_t_uint256_t_uint256_t_address_t_bytes_memory_ptr_t_bytes_memory_ptr_t_string_memory_ptr__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 96), 192)\n        let tail_1 := abi_encode_string(value3, add(headStart, 192))\n        mstore(add(headStart, 128), sub(tail_1, headStart))\n        let tail_2 := abi_encode_string(value4, tail_1)\n        mstore(add(headStart, 160), sub(tail_2, headStart))\n        tail := abi_encode_string(value5, tail_2)\n    }\n    function abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_array_uint256_dyn(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_stringliteral_3c5bfa18ac85c8d1f4d8c63a7d33e2c24b63b20654ca46146bece560cc5642df__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 51)\n        mstore(add(headStart, 64), \"Interacting with the library con\")\n        mstore(add(headStart, 96), \"tract is forbidden.\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_6f6b3247450dc94fc6574303b07d6b95320782b0ece8a8d742601c64b874e995__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 48)\n        mstore(add(headStart, 64), \"Permissions: Sender does not hav\")\n        mstore(add(headStart, 96), \"e management key\")\n        tail := add(headStart, 128)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_stringliteral_ced1bafc369b7e2b0ca5f6ed9c6c1eb753593d516580b4f3f74fc55e230be91e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 33)\n        mstore(add(headStart, 64), \"Conflict: Key already has purpos\")\n        mstore(add(headStart, 96), \"e\")\n        tail := add(headStart, 128)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, not(0)) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function abi_encode_tuple_t_stringliteral_86f6f17a299db15bd5520d80701f10acbd3f85058227676cf3a946fcbf6dc7be__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 43)\n        mstore(add(headStart, 64), \"Permissions: Sender does not hav\")\n        mstore(add(headStart, 96), \"e CLAIM key\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_5abac270f6dfe9fec0cffc69c1e2c0be20d5e956877e37120e8a684061fa199a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 43)\n        mstore(add(headStart, 64), \"NonExisting: There is no claim w\")\n        mstore(add(headStart, 96), \"ith this ID\")\n        tail := add(headStart, 128)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x) { panic_error_0x11() }\n    }\n    function panic_error_0x31()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x31)\n        revert(0, 0x24)\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function array_dataslot_bytes_storage(ptr) -> data\n    {\n        mstore(0, ptr)\n        data := keccak256(0, 0x20)\n    }\n    function abi_encode_bytes_storage(value, pos) -> ret\n    {\n        let slotValue := sload(value)\n        let length := extract_byte_array_length(slotValue)\n        mstore(pos, length)\n        let _1 := 0x20\n        let _2 := 1\n        switch and(slotValue, _2)\n        case 0 {\n            mstore(add(pos, _1), and(slotValue, not(255)))\n            ret := add(add(pos, shl(5, iszero(iszero(length)))), _1)\n        }\n        case 1 {\n            mstore(0, value)\n            let dataPos := keccak256(0, _1)\n            let i := 0\n            for { } lt(i, length) { i := add(i, _1) }\n            {\n                mstore(add(add(pos, i), _1), sload(dataPos))\n                dataPos := add(dataPos, _2)\n            }\n            ret := add(add(pos, i), _1)\n        }\n    }\n    function abi_encode_tuple_t_uint256_t_bytes_storage_t_bytes_storage_t_string_storage__to_t_uint256_t_bytes_memory_ptr_t_bytes_memory_ptr_t_string_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), 128)\n        let tail_1 := abi_encode_bytes_storage(value1, add(headStart, 128))\n        mstore(add(headStart, 64), sub(tail_1, headStart))\n        let tail_2 := abi_encode_bytes_storage(value2, tail_1)\n        mstore(add(headStart, 96), sub(tail_2, headStart))\n        tail := abi_encode_bytes_storage(value3, tail_2)\n    }\n    function abi_encode_tuple_t_stringliteral_ecf72bc49d7f73c31e2e6c0aa61a9da361706713b0b2d9f242245b62877b78d2__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 33)\n        mstore(add(headStart, 64), \"NonExisting: Key isn't registere\")\n        mstore(add(headStart, 96), \"d\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_c5c6d7bd64c120db0a0dc884afccd0850100d55ba7968801315e930cfbbcdba6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 42)\n        mstore(add(headStart, 64), \"NonExisting: Key doesn't have su\")\n        mstore(add(headStart, 96), \"ch purpose\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_2239811702909a77ce5c35bc6905c72e29655cd69df6a5b32bf74fddbc156a6c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"Sender does not have action key\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes_storage_t_rational_0_by_1__to_t_bytes_memory_ptr_t_uint8__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, 64)\n        tail := abi_encode_bytes_storage(value0, add(headStart, 64))\n        mstore(add(headStart, 32), and(value1, 0xff))\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory_with_cleanup(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_bytes_storage__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes_storage(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_stringliteral_7b35df432d579b46a32d099f957987ceecae8614c49c5a100b4430714240d197__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 50)\n        mstore(add(headStart, 64), \"Permissions: Sender does not hav\")\n        mstore(add(headStart, 96), \"e claim signer key\")\n        tail := add(headStart, 128)\n    }\n    function clean_up_bytearray_end_slots_bytes_storage(array, len, startIndex)\n    {\n        if gt(len, 31)\n        {\n            let _1 := 0\n            mstore(_1, array)\n            let data := keccak256(_1, 0x20)\n            let deleteStart := add(data, shr(5, add(startIndex, 31)))\n            if lt(startIndex, 0x20) { deleteStart := data }\n            let _2 := add(data, shr(5, add(len, 31)))\n            let start := deleteStart\n            for { } lt(start, _2) { start := add(start, 1) }\n            { sstore(start, _1) }\n        }\n    }\n    function extract_used_part_and_set_length_of_short_byte_array(data, len) -> used\n    {\n        used := or(and(data, not(shr(shl(3, len), not(0)))), shl(1, len))\n    }\n    function copy_byte_array_to_storage_from_t_bytes_memory_ptr_to_t_bytes_storage(slot, src)\n    {\n        let newLen := mload(src)\n        if gt(newLen, sub(shl(64, 1), 1)) { panic_error_0x41() }\n        clean_up_bytearray_end_slots_bytes_storage(slot, extract_byte_array_length(sload(slot)), newLen)\n        let srcOffset := 0\n        let srcOffset_1 := 0x20\n        srcOffset := srcOffset_1\n        switch gt(newLen, 31)\n        case 1 {\n            let loopEnd := and(newLen, not(31))\n            let dstPtr := array_dataslot_bytes_storage(slot)\n            let i := 0\n            for { } lt(i, loopEnd) { i := add(i, srcOffset_1) }\n            {\n                sstore(dstPtr, mload(add(src, srcOffset)))\n                dstPtr := add(dstPtr, 1)\n                srcOffset := add(srcOffset, srcOffset_1)\n            }\n            if lt(loopEnd, newLen)\n            {\n                let lastValue := mload(add(src, srcOffset))\n                sstore(dstPtr, and(lastValue, not(shr(and(shl(3, newLen), 248), not(0)))))\n            }\n            sstore(slot, add(shl(1, newLen), 1))\n        }\n        default {\n            let value := 0\n            if newLen\n            {\n                value := mload(add(src, srcOffset))\n            }\n            sstore(slot, extract_used_part_and_set_length_of_short_byte_array(value, newLen))\n        }\n    }\n    function copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage(slot, src)\n    {\n        let newLen := mload(src)\n        if gt(newLen, sub(shl(64, 1), 1)) { panic_error_0x41() }\n        clean_up_bytearray_end_slots_bytes_storage(slot, extract_byte_array_length(sload(slot)), newLen)\n        let srcOffset := 0\n        let srcOffset_1 := 0x20\n        srcOffset := srcOffset_1\n        switch gt(newLen, 31)\n        case 1 {\n            let loopEnd := and(newLen, not(31))\n            let dstPtr := array_dataslot_bytes_storage(slot)\n            let i := 0\n            for { } lt(i, loopEnd) { i := add(i, srcOffset_1) }\n            {\n                sstore(dstPtr, mload(add(src, srcOffset)))\n                dstPtr := add(dstPtr, 1)\n                srcOffset := add(srcOffset, srcOffset_1)\n            }\n            if lt(loopEnd, newLen)\n            {\n                let lastValue := mload(add(src, srcOffset))\n                sstore(dstPtr, and(lastValue, not(shr(and(shl(3, newLen), 248), not(0)))))\n            }\n            sstore(slot, add(shl(1, newLen), 1))\n        }\n        default {\n            let value := 0\n            if newLen\n            {\n                value := mload(add(src, srcOffset))\n            }\n            sstore(slot, extract_used_part_and_set_length_of_short_byte_array(value, newLen))\n        }\n    }\n    function abi_encode_tuple_t_uint256_t_bytes_memory_ptr_t_bytes_memory_ptr_t_string_memory_ptr__to_t_uint256_t_bytes_memory_ptr_t_bytes_memory_ptr_t_string_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), 128)\n        let tail_1 := abi_encode_string(value1, add(headStart, 128))\n        mstore(add(headStart, 64), sub(tail_1, headStart))\n        let tail_2 := abi_encode_string(value2, tail_1)\n        mstore(add(headStart, 96), sub(tail_2, headStart))\n        tail := abi_encode_string(value3, tail_2)\n    }\n    function abi_encode_tuple_t_stringliteral_58f47ea4e737df2d9cc4764db26c111751884cf0a1856aca9f4c66cadc811e1b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"Already executed\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_stringliteral_f97b6c8710e53ddda282a80ef5956d499e3405b5bb60ff3bc53f8e99e471fc0e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 30)\n        mstore(add(headStart, 64), \"Initial key was already setup.\")\n        tail := add(headStart, 96)\n    }\n}",
      "id": 54,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "435:16738:1:-:0;;;490:32;;;-1:-1:-1;;528:31:1;490:32;528:31;;;566:239;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;635:11;:25;;-1:-1:-1;;635:25:1;649:11;;635:25;;;;;;;;;;;;;675:11;;;671:128;;;702:37;718:20;702:15;:37::i;:::-;671:128;;;770:11;:18;;-1:-1:-1;;770:18:1;784:4;770:18;;;671:128;566:239;;435:16738;;2112:451;2195:11;;;;2194:12;;:32;;-1:-1:-1;1695:4:1;1803:17;1838:7;2210:16;2186:75;;;;-1:-1:-1;;;2186:75:1;;673:2:54;2186:75:1;;;655:21:54;712:2;692:18;;;685:30;751:32;731:18;;;724:60;801:18;;2186:75:1;;;;;;;;2271:11;:18;;-1:-1:-1;;2299:18:1;;;;;2353:32;;;-1:-1:-1;;;;;994:32:54;;2353::1;;;976:51:54;-1:-1:-1;;949:18:54;2353:32:1;;;-1:-1:-1;;2353:32:1;;;;;;;;;2343:43;;2353:32;2343:43;;;;2396:10;;;;:4;:10;;;;;;:14;;;:21;;;2427:25;;;;;;;;;:10;;;;;;;;2343:43;-1:-1:-1;2427:25:1;;2353:32;2427:25;:::i;:::-;-1:-1:-1;2462:10:1;;;;2483:1;2462:10;;;;;;;;:18;;:22;;;2494:13;:16;;;;:27;;;;;;;;;;;;;;;2536:20;2483:1;;;;2467:4;;2536:20;;;2176:387;2112:451;:::o;435:16738::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;435:16738:1;;;-1:-1:-1;435:16738:1;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:452:54;90:6;98;151:2;139:9;130:7;126:23;122:32;119:52;;;167:1;164;157:12;119:52;193:16;;-1:-1:-1;;;;;238:31:54;;228:42;;218:70;;284:1;281;274:12;218:70;357:2;342:18;;336:25;307:5;;-1:-1:-1;399:15:54;;392:23;380:36;;370:64;;430:1;427;420:12;370:64;453:7;443:17;;;14:452;;;;;:::o;830:203::-;435:16738:1;;;;;;",
  "deployedSourceMap": "435:16738:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3006:217;;;;;;;;;;-1:-1:-1;3006:217:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;5230:995;;;;;;;;;;-1:-1:-1;5230:995:1;;;;;:::i;:::-;;:::i;:::-;;;1533:14:54;;1526:22;1508:41;;1496:2;1481:18;5230:995:1;1368:187:54;14073:1078:1;;;;;;;;;;-1:-1:-1;14073:1078:1;;;;;:::i;:::-;;:::i;8867:1462::-;;;;;;;;;;-1:-1:-1;8867:1462:1;;;;;:::i;:::-;;:::i;253:111:8:-;;;;;;;;;;-1:-1:-1;343:14:8;;;;;;;;;;;-1:-1:-1;;;343:14:8;;;;253:111;;;;343:14;253:111;:::i;6613:1139:1:-;;;;;;;;;;-1:-1:-1;6613:1139:1;;;;;:::i;:::-;;:::i;17006:165::-;;;;;;;;;;-1:-1:-1;17006:165:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3980:164::-;;;;;;;;;;-1:-1:-1;3980:164:1;;;;;:::i;:::-;;:::i;11989:1650::-;;;;;;;;;;-1:-1:-1;11989:1650:1;;;;;:::i;:::-;;:::i;:::-;;;6139:25:54;;;6127:2;6112:18;11989:1650:1;5993:177:54;8165:636:1;;;;;;:::i;:::-;;:::i;1319:111::-;;;;;;;;;;-1:-1:-1;1319:111:1;;;;;:::i;:::-;;:::i;:::-;;16170:501;;;;;;;;;;-1:-1:-1;16170:501:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;10438:462::-;;;;;;;;;;-1:-1:-1;10438:462:1;;;;;:::i;:::-;;:::i;3459:160::-;;;;;;;;;;-1:-1:-1;3459:160:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3006:217::-;3108:15;3160:10;;;:4;:10;;;;;;;;3181:18;;;;3201:14;;;;3152:64;;;;;;;;;;;;;;;;;3081:25;;3108:15;;;3160:10;;3152:64;3160:10;;3152:64;;3160:10;3152:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3006:217;;;;;:::o;5230:995::-;974:11;;5348:12;;974:11;;;;;;:19;;:11;:19;966:83;;;;-1:-1:-1;;;966:83:1;;;;;;;:::i;:::-;;;;;;;;;5380:10:::1;5402:4;5380:27;5376:170;;5431:51;5466:10;5455:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;5445:33;;;;;;5480:1;5431:13;:51::i;:::-;5423:112;;;;-1:-1:-1::0;;;5423:112:1::1;;;;;;;:::i;:::-;5560:10;::::0;;;:4:::1;:10;::::0;;;;:14:::1;;::::0;:22;;;5556:549:::1;;5603:20;5598:310;5647:10;::::0;;;:4:::1;:10;::::0;;;;:26;5629:44;::::1;5598:310;;;5712:15;5730:10:::0;;;:4:::1;:10;::::0;;;;:36;;5750:15;;5730:36;::::1;;;;;:::i;:::-;;;;;;;;;5712:54;;5800:8;5789:7;:19:::0;5785:109:::1;;5832:43;::::0;-1:-1:-1;;;5832:43:1;;9450:2:54;5832:43:1::1;::::0;::::1;9432:21:54::0;9489:2;9469:18;;;9462:30;9528:34;9508:18;;;9501:62;-1:-1:-1;;;9579:18:54;;;9572:31;9620:19;;5832:43:1::1;9248:397:54::0;5785:109:1::1;-1:-1:-1::0;5675:17:1;::::1;::::0;::::1;:::i;:::-;;;;5598:310;;;-1:-1:-1::0;5922:10:1::1;::::0;;;:4:::1;:10;::::0;;;;;;:34;;;;::::1;::::0;;;;;;;::::1;::::0;;;5556:549:::1;;;5987:10;::::0;;;:4:::1;:10;::::0;;;;;;;:14:::1;::::0;::::1;:21:::0;;;6022:32;;;;::::1;::::0;;;;;;:10;;;;;;;;:32:::1;::::0;5987:10;6022:32:::1;:::i;:::-;-1:-1:-1::0;6068:10:1::1;::::0;;;:4:::1;:10;::::0;;;;;;;:18:::1;:26:::0;;;5556:549:::1;6115:23;::::0;;;:13:::1;:23;::::0;;;;;;;:34;;::::1;::::0;::::1;::::0;;;;;;;;;;::::1;::::0;;;6165:31;6190:5;;6129:8;;6144:4;;-1:-1:-1;;;;;;;;;;;6165:31:1;::::1;-1:-1:-1::0;6214:4:1::1;5230:995:::0;;;;;:::o;14073:1078::-;974:11;;14151:12;;974:11;;;;;;:19;;:11;:19;966:83;;;;-1:-1:-1;;;966:83:1;;;;;;;:::i;:::-;14179:10:::1;14201:4;14179:27;14175:165;;14230:51;14265:10;14254:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;14244:33;;;;;;14279:1;14230:13;:51::i;:::-;14222:107;;;::::0;-1:-1:-1;;;14222:107:1;;10124:2:54;14222:107:1::1;::::0;::::1;10106:21:54::0;10163:2;10143:18;;;10136:30;-1:-1:-1;;;;;;;;;;;10182:18:54;;;10175:62;-1:-1:-1;;;10253:18:54;;;10246:41;10304:19;;14222:107:1::1;9922:407:54::0;14222:107:1::1;14354:16;::::0;;;:6:::1;:16;::::0;;;;:22;:27;;14350:111:::1;;14397:53;::::0;-1:-1:-1;;;14397:53:1;;10536:2:54;14397:53:1::1;::::0;::::1;10518:21:54::0;10575:2;10555:18;;;10548:30;10614:34;10594:18;;;10587:62;-1:-1:-1;;;10665:18:54;;;10658:41;10716:19;;14397:53:1::1;10334:407:54::0;14350:111:1::1;14471:15;14500:107;14507:37;14521:16:::0;;;:6:::1;:16;::::0;;;;;;;:22;14507:37;;:13:::1;:37:::0;;;;;:49;;14560:8;;14507:37;14545:10;;14507:49;::::1;;;;;:::i;:::-;;;;;;;;;:61;14500:107;;14584:12:::0;::::1;::::0;::::1;:::i;:::-;;;;14500:107;;;14669:37;14683:16:::0;;;:6:::1;:16;::::0;;;;;;;:22;14669:37;;:13:::1;:37:::0;;;;;14707:44;;:48:::1;::::0;14754:1:::1;::::0;14707:48:::1;:::i;:::-;14669:87;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;14631:16;;;:6:::1;:16:::0;;;;;;:22;14617:37;;:13:::1;:37:::0;;;;;:49;;14655:10;;14617:49;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;:139:::0;;;;14780:16;;;:6:::1;:16:::0;;;;;;:22;14766:37;;:13:::1;:37:::0;;;;:43;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;-1:-1:-1;;14766:43:1;;;;;;;;;;;;14946:16;;;:6:::1;:16:::0;;;;;;;;;:23:::1;::::0;::::1;::::0;14873:22;;14766:43:::1;14909:23:::0;::::1;::::0;14825:263;;-1:-1:-1;;;;;14946:23:1;;::::1;::::0;14873:22;;14953:8;;14825:263:::1;::::0;::::1;::::0;14909:23;14983:26:::1;::::0;::::1;::::0;15023:21;;::::1;::::0;15058:20:::1;::::0;;::::1;::::0;14825:263:::1;:::i;:::-;;;;;;;;15106:16;::::0;;;:6:::1;:16;::::0;;;;15099:23;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;;15099:23:1::1;::::0;;15106:16;15099:23:::1;;::::0;::::1;15106:16:::0;15099:23:::1;:::i;:::-;;;::::0;::::1;;;:::i;:::-;;;::::0;::::1;;;:::i;:::-;;;15140:4;15133:11;;;1059:1;14073:1078:::0;;;:::o;8867:1462::-;974:11;;8973:12;;974:11;;;;;;:19;;:11;:19;966:83;;;;-1:-1:-1;;;966:83:1;;;;;;;:::i;:::-;9009:10:::1;::::0;;;:4:::1;:10;::::0;;;;:14:::1;;::::0;:22;::::1;9001:68;;;::::0;-1:-1:-1;;;9001:68:1;;13131:2:54;9001:68:1::1;::::0;::::1;13113:21:54::0;13170:2;13150:18;;;13143:30;13209:34;13189:18;;;13182:62;-1:-1:-1;;;13260:18:54;;;13253:31;13301:19;;9001:68:1::1;12929:397:54::0;9001:68:1::1;9084:10;9106:4;9084:27;9080:199;;9135:51;9170:10;9159:22;;;;;;;;:::i;9135:51::-;9127:112;;;;-1:-1:-1::0;;;9127:112:1::1;;;;;;;:::i;:::-;9326:1;9297:10:::0;;;:4:::1;:10;::::0;;;;:26;9289:85:::1;;;;-1:-1:-1::0;;;9289:85:1::1;;;;;;;:::i;:::-;9385:17;9416:193;9423:10;::::0;;;:4:::1;:10;::::0;;;;:33;;9460:8;;9423:10;9443:12;;9423:33;::::1;;;;;:::i;:::-;;;;;;;;;:45;9416:193;;9484:14:::0;::::1;::::0;::::1;:::i;:::-;9533:10;::::0;;;:4:::1;:10;::::0;;;;:26;9484:14;;-1:-1:-1;9517:42:1;::::1;::::0;-1:-1:-1;9416:193:1::1;9513:86;9416:193;9642:10;::::0;;;:4:::1;:10;::::0;;;;:26;9627:41;::::1;9619:96;;;;-1:-1:-1::0;;;9619:96:1::1;;;;;;;:::i;:::-;9762:10;::::0;;;:4:::1;:10;::::0;;;;;;;9782:26;;9762:10;;9782:30:::1;::::0;::::1;:::i;:::-;9762:51;;;;;;;;:::i;:::-;;;;;;;;;9726:4;:10;9731:4;9726:10;;;;;;;;;;;:19;;9746:12;9726:33;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;:87:::0;;;;9823:10;;;:4:::1;:10:::0;;;;;;:25;;;::::1;;;;:::i;:::-;;;;;;;;;;;;;;;;;;9859:13;9887:85;9894:23;::::0;;;:13:::1;:23;::::0;;;;:33;;9931:4;;9894:23;9918:8;;9894:33;::::1;;;;;:::i;:::-;;;;;;;;;:41;9887:85;;9951:10:::0;::::1;::::0;::::1;:::i;:::-;;;;9887:85;;;10018:23;::::0;;;:13:::1;:23;::::0;;;;10042:30;;:34:::1;::::0;10075:1:::1;::::0;10042:34:::1;:::i;:::-;10018:59;;;;;;;;:::i;:::-;;;;;;;;;9982:13;:23;9996:8;9982:23;;;;;;;;;;;10006:8;9982:33;;;;;;;;:::i;:::-;;;;;;;;:95;;;;10087:13;:23;10101:8;10087:23;;;;;;;;;;;:29;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;-1:-1:-1;;10087:29:1;;;;;;;;;;;;10142:10;;;10087:29:::1;10142:10:::0;;;;;;;:18;;::::1;::::0;10175:26;;10142:18;;10175:31;10171:79:::1;;10229:10;::::0;;;:4:::1;:10;::::0;;;;;10222:17:::1;10229:10:::0;;10222:17:::1;:::i;:::-;-1:-1:-1::0;10222:17:1::1;;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;10171:79:::1;10292:7;10282:8;10276:4;10265:35;;;;;;;;;;10318:4;10311:11;;;;;1059:1;8867:1462:::0;;;;:::o;6613:1139::-;974:11;;6713:12;;974:11;;;;;;:19;;:11;:19;966:83;;;;-1:-1:-1;;;966:83:1;;;;;;;:::i;:::-;6749:51:::1;6784:10;6773:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;6763:33;;;;;;6798:1;6749:13;:51::i;:::-;6741:95;;;::::0;-1:-1:-1;;;6741:95:1;;13944:2:54;6741:95:1::1;::::0;::::1;13926:21:54::0;13983:2;13963:18;;;13956:30;14022:33;14002:18;;;13995:61;14073:18;;6741:95:1::1;13742:355:54::0;6741:95:1::1;6861:3;6852:23;6866:8;6852:23;;;;1533:14:54::0;1526:22;1508:41;;1496:2;1481:18;;1368:187;6852:23:1::1;;;;;;;;6890:16:::0;::::1;;6902:4;6890:16:::0;6886:839:::1;;6922:15;::::0;;;:10:::1;:15;::::0;;;;;;;:24;;::::1;:31:::0;;-1:-1:-1;;6922:31:1::1;6949:4;6922:31:::0;;::::1;::::0;;;6981:18;;7012:21;;::::1;::::0;7036:35;;-1:-1:-1;;;;;6981:18:1;;::::1;::::0;7012:21;;7036:35:::1;::::0;7047:20:::1;::::0;;::::1;::::0;6922:15;7036:35:::1;;:::i;:::-;;::::0;;-1:-1:-1;;7036:35:1;;::::1;::::0;;;;;;;6981:91:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;6968:104:1;;-1:-1:-1;;7087:565:1;::::1;;;7118:15;::::0;;;:10:::1;:15;::::0;;;;;;;;:24;;::::1;:31:::0;;-1:-1:-1;;7118:31:1::1;;;::::0;;7145:4:::1;7268:21:::0;::::1;::::0;7228:18;;7173:176;;7268:21;;-1:-1:-1;;;;;7228:18:1::1;::::0;7129:3;;7173:176:::1;::::0;::::1;::::0;7311:20:::1;::::0;;::::1;::::0;7173:176:::1;:::i;:::-;;;;;;;;-1:-1:-1::0;7375:4:1::1;7368:11;;7087:565;7525:15;::::0;;;:10:::1;:15;::::0;;;;;;:21:::1;::::0;::::1;::::0;7485:18;;7423:183;;7525:21;;-1:-1:-1;;;;;7485:18:1::1;::::0;7536:3;;7423:183:::1;::::0;::::1;::::0;7568:20:::1;::::0;;::::1;::::0;7423:183:::1;:::i;:::-;;;;;;;;-1:-1:-1::0;7632:5:1::1;7625:12;;6886:839;-1:-1:-1::0;;7709:5:1::1;7682:15:::0;;;:10:::1;:15;::::0;;;;;;;:24:::1;:32:::0;;-1:-1:-1;;7682:32:1::1;::::0;;-1:-1:-1;;6613:1139:1:o;17006:165::-;17143:21;;;;:13;:21;;;;;;;;;17136:28;;;;;;;;;;;;;;;;;17095:25;;17136:28;;;17143:21;17136:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17006:165;;;:::o;3980:164::-;4114:23;;;;:13;:23;;;;;;;;;4107:30;;;;;;;;;;;;;;;;;4069:22;;4107:30;;;4114:23;4107:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3980:164;;;:::o;11989:1650::-;974:11;;12231:22;;974:11;;;;;;:19;;:11;:19;966:83;;;;-1:-1:-1;;;966:83:1;;;;;;;:::i;:::-;12297:27:::1;::::0;;-1:-1:-1;;;;;15128:32:54;;12297:27:1::1;::::0;;::::1;15110:51:54::0;;;;15177:18;;;15170:34;;;12297:27:1;;;;;;;;;15083:18:54;;;;12297:27:1;;;12287:38;;;::::1;::::0;12362:4:::1;12340:10;:27;12336:172;;12391:51;12426:10;12415:22;;;;;;;;:::i;12391:51::-;12383:114;;;::::0;-1:-1:-1;;;12383:114:1;;15417:2:54;12383:114:1::1;::::0;::::1;15399:21:54::0;15456:2;15436:18;;;15429:30;-1:-1:-1;;;;;;;;;;;15475:18:54;;;15468:62;-1:-1:-1;;;15546:18:54;;;15539:48;15604:19;;12383:114:1::1;15215:414:54::0;12383:114:1::1;12522:15;::::0;;;:6:::1;:15;::::0;;;;:22:::1;;::::0;-1:-1:-1;;;;;12522:33:1;;::::1;:22:::0;::::1;:33;12518:1090;;12571:21;::::0;;;:13:::1;:21;::::0;;;;;;;:35;;::::1;::::0;;::::1;::::0;;;;;;;;::::1;::::0;;;12620:15;;;:6:::1;:15:::0;;;;;;:30;;;12664:22;;::::1;:32:::0;;;12710:22:::1;::::0;::::1;:32:::0;;-1:-1:-1;;;;;;12710:32:1::1;-1:-1:-1::0;;;;;12710:32:1;::::1;;::::0;;12756:25:::1;;:38;12784:10:::0;12756:25;:38:::1;:::i;:::-;-1:-1:-1::0;12808:15:1::1;::::0;;;:6:::1;:15;::::0;;;;;;;:20:::1;:28;12831:5:::0;12808:20;:28:::1;:::i;:::-;-1:-1:-1::0;12850:15:1::1;::::0;;;:6:::1;:15;::::0;;;;:19:::1;;:26;12872:4:::0;12850:19;:26:::1;:::i;:::-;;12998:7;-1:-1:-1::0;;;;;12896:196:1::1;12949:6;12924:7;12896:196;12973:7;13023:10;13051:5;13074:4;12896:196;;;;;;;;;:::i;:::-;;;;;;;;12518:1090;;;13123:15;::::0;;;:6:::1;:15;::::0;;;;:30;;;13167:22:::1;::::0;::::1;:32:::0;;;13213:22:::1;::::0;::::1;:32:::0;;-1:-1:-1;;;;;;13213:32:1::1;-1:-1:-1::0;;;;;13213:32:1;::::1;;::::0;;13259:25:::1;;:38;13287:10:::0;13259:25;:38:::1;:::i;:::-;-1:-1:-1::0;13311:15:1::1;::::0;;;:6:::1;:15;::::0;;;;;;;:20:::1;:28;13334:5:::0;13311:20;:28:::1;:::i;:::-;-1:-1:-1::0;13353:15:1::1;::::0;;;:6:::1;:15;::::0;;;;:19:::1;;:26;13375:4:::0;13353:19;:26:::1;:::i;:::-;;13503:7;-1:-1:-1::0;;;;;13399:198:1::1;13454:6;13429:7;13399:198;13478:7;13528:10;13556:5;13579:4;13399:198;;;;;;;;;:::i;:::-;;;;;;;;12518:1090;13625:7:::0;11989:1650;-1:-1:-1;;;;;;;11989:1650:1:o;8165:636::-;974:11;;8298:19;;974:11;;;;;;:19;;:11;:19;966:83;;;;-1:-1:-1;;;966:83:1;;;;;;;:::i;:::-;8342:26:::1;8353:14:::0;;8342:26;;:10:::1;:26;::::0;;;;;;;:35:::1;::::0;::::1;::::0;::::1;;;8341:36;8333:65;;;::::0;-1:-1:-1;;;8333:65:1;;19884:2:54;8333:65:1::1;::::0;::::1;19866:21:54::0;19923:2;19903:18;;;19896:30;-1:-1:-1;;;19942:18:54;;;19935:46;19998:18;;8333:65:1::1;19682:340:54::0;8333:65:1::1;8408:26;8419:14:::0;;8408:26;;:10:::1;:26;::::0;;;;;:35;;-1:-1:-1;;;;;;8408:35:1::1;-1:-1:-1::0;;;;;8408:35:1;::::1;;::::0;;8464:14;;8453:26;;;;;-1:-1:-1;8453:32:1::1;:41:::0;;;8515:14;;8504:26;;;;:31:::1;;:39;8538:5:::0;8504:31;:39:::1;:::i;:::-;;8599:6;8594:3;-1:-1:-1::0;;;;;8559:54:1::1;8578:14;;8559:54;8607:5;8559:54;;;;;;:::i;:::-;;;;;;;;8628:51;8663:10;8652:22;;;;;;;;:::i;8628:51::-;8624:111;;;8695:29;8703:14;;8719:4;8695:7;:29::i;:::-;;8624:111;8745:14;:16:::0;;;:14;:16:::1;::::0;::::1;:::i;:::-;;;;;;8793:1;8778:14;;:16;;;;:::i;:::-;8771:23:::0;8165:636;-1:-1:-1;;;;8165:636:1:o;1319:111::-;1386:37;1402:20;1386:15;:37::i;:::-;1319:111;:::o;16170:501::-;16260:13;16449:16;;;:6;:16;;;;;;;:22;;16485:23;;;;16522;;;;16559:26;;;16428:236;;16260:13;;;;16331:22;;;;;;16449;;16485:23;;-1:-1:-1;;;;;16522:23:1;;;;16559:26;;16599:21;;;;16634:20;;;;;16559:26;;16428:236;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16170:501;;;;;;;:::o;10438:462::-;10538:11;10582:10;;;:4;:10;;;;;;;;10565:27;;;;;;;;;;;;;;;;;;;;;10538:11;;10565:27;;;;10582:10;;10565:27;;;10582:10;10565:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10565:27:1;;;-1:-1:-1;;10565:27:1;;;;;;;;;;;;;;;;;;10606:7;;;10565:27;;-1:-1:-1;;10606:12:1;10602:30;;10627:5;10620:12;;;;;10602:30;10648:20;10643:228;10692:12;;:19;10674:37;;10643:228;;;10746:15;10764:3;:12;;;10777:15;10764:29;;;;;;;;:::i;:::-;;;;;;;10746:47;;10812:7;10823:1;10812:12;:35;;;;10839:8;10828:7;:19;10812:35;10808:52;;;10856:4;10849:11;;;;;;;10808:52;-1:-1:-1;10713:17:1;;;;:::i;:::-;;;;10643:228;;;-1:-1:-1;10888:5:1;;10438:462;-1:-1:-1;;;;10438:462:1:o;3459:160::-;3592:10;;;;:4;:10;;;;;;;;;3584:28;;;;;;;;;;;;;;;;;3542:26;;3584:28;;;3592:10;3584:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3459:160;;;:::o;2112:451::-;2195:11;;;;2194:12;;:32;;-1:-1:-1;1695:4:1;1803:17;1838:7;2210:16;2186:75;;;;-1:-1:-1;;;2186:75:1;;20452:2:54;2186:75:1;;;20434:21:54;20491:2;20471:18;;;20464:30;20530:32;20510:18;;;20503:60;20580:18;;2186:75:1;20250:354:54;2186:75:1;2271:11;:18;;-1:-1:-1;;2299:18:1;;;;;2353:32;;-1:-1:-1;;2353:32:1;;2364:20;;2353:32;;;:::i;:::-;;;;-1:-1:-1;;2353:32:1;;;;;;;;;2343:43;;2353:32;2343:43;;;;2396:10;;;;:4;:10;;;;;;:14;;;:21;;;2427:25;;;;;;;;;:10;;;;;;;;2343:43;-1:-1:-1;2427:25:1;;2353:32;2427:25;:::i;:::-;-1:-1:-1;2462:10:1;;;;2483:1;2462:10;;;;;;;;:18;;:22;;;2494:13;:16;;;;:27;;;;;;;;;;;;;;;2536:20;2483:1;;;;2467:4;;-1:-1:-1;;;;;;;;;;;2536:20:1;;2176:387;2112:451;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:180:54;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:54;;14:180;-1:-1:-1;14:180:54:o;199:435::-;252:3;290:5;284:12;317:6;312:3;305:19;343:4;372:2;367:3;363:12;356:19;;409:2;402:5;398:14;430:1;440:169;454:6;451:1;448:13;440:169;;;515:13;;503:26;;549:12;;;;584:15;;;;476:1;469:9;440:169;;;-1:-1:-1;625:3:54;;199:435;-1:-1:-1;;;;;199:435:54:o;639:403::-;874:2;863:9;856:21;837:4;894:56;946:2;935:9;931:18;923:6;894:56;:::i;:::-;981:2;966:18;;959:34;;;;-1:-1:-1;1024:2:54;1009:18;1002:34;886:64;639:403;-1:-1:-1;639:403:54:o;1047:316::-;1124:6;1132;1140;1193:2;1181:9;1172:7;1168:23;1164:32;1161:52;;;1209:1;1206;1199:12;1161:52;-1:-1:-1;;1232:23:54;;;1302:2;1287:18;;1274:32;;-1:-1:-1;1353:2:54;1338:18;;;1325:32;;1047:316;-1:-1:-1;1047:316:54:o;1560:248::-;1628:6;1636;1689:2;1677:9;1668:7;1664:23;1660:32;1657:52;;;1705:1;1702;1695:12;1657:52;-1:-1:-1;;1728:23:54;;;1798:2;1783:18;;;1770:32;;-1:-1:-1;1560:248:54:o;1813:250::-;1898:1;1908:113;1922:6;1919:1;1916:13;1908:113;;;1998:11;;;1992:18;1979:11;;;1972:39;1944:2;1937:10;1908:113;;;-1:-1:-1;;2055:1:54;2037:16;;2030:27;1813:250::o;2068:271::-;2110:3;2148:5;2142:12;2175:6;2170:3;2163:19;2191:76;2260:6;2253:4;2248:3;2244:14;2237:4;2230:5;2226:16;2191:76;:::i;:::-;2321:2;2300:15;-1:-1:-1;;2296:29:54;2287:39;;;;2328:4;2283:50;;2068:271;-1:-1:-1;;2068:271:54:o;2344:220::-;2493:2;2482:9;2475:21;2456:4;2513:45;2554:2;2543:9;2539:18;2531:6;2513:45;:::i;:::-;2505:53;2344:220;-1:-1:-1;;;2344:220:54:o;2569:341::-;2634:6;2642;2695:2;2683:9;2674:7;2670:23;2666:32;2663:52;;;2711:1;2708;2701:12;2663:52;2747:9;2734:23;2724:33;;2807:2;2796:9;2792:18;2779:32;2854:5;2847:13;2840:21;2833:5;2830:32;2820:60;;2876:1;2873;2866:12;2820:60;2899:5;2889:15;;;2569:341;;;;;:::o;3100:632::-;3271:2;3323:21;;;3393:13;;3296:18;;;3415:22;;;3242:4;;3271:2;3494:15;;;;3468:2;3453:18;;;3242:4;3537:169;3551:6;3548:1;3545:13;3537:169;;;3612:13;;3600:26;;3681:15;;;;3646:12;;;;3573:1;3566:9;3537:169;;;-1:-1:-1;3723:3:54;;3100:632;-1:-1:-1;;;;;;3100:632:54:o;3737:173::-;3805:20;;-1:-1:-1;;;;;3854:31:54;;3844:42;;3834:70;;3900:1;3897;3890:12;3915:127;3976:10;3971:3;3967:20;3964:1;3957:31;4007:4;4004:1;3997:15;4031:4;4028:1;4021:15;4047:631;4111:5;-1:-1:-1;;;;;4171:14:54;;;4168:40;;;4188:18;;:::i;:::-;4263:2;4257:9;4231:2;4317:15;;-1:-1:-1;;4313:24:54;;;4339:2;4309:33;4305:42;4293:55;;;4363:18;;;4383:22;;;4360:46;4357:72;;;4409:18;;:::i;:::-;4449:10;4445:2;4438:22;4478:6;4469:15;;4508:6;4500;4493:22;4548:3;4539:6;4534:3;4530:16;4527:25;4524:45;;;4565:1;4562;4555:12;4524:45;4615:6;4610:3;4603:4;4595:6;4591:17;4578:44;4670:1;4663:4;4654:6;4646;4642:19;4638:30;4631:41;;;;4047:631;;;;;:::o;4683:220::-;4725:5;4778:3;4771:4;4763:6;4759:17;4755:27;4745:55;;4796:1;4793;4786:12;4745:55;4818:79;4893:3;4884:6;4871:20;4864:4;4856:6;4852:17;4818:79;:::i;4908:1080::-;5040:6;5048;5056;5064;5072;5080;5133:3;5121:9;5112:7;5108:23;5104:33;5101:53;;;5150:1;5147;5140:12;5101:53;5186:9;5173:23;5163:33;;5243:2;5232:9;5228:18;5215:32;5205:42;;5266:38;5300:2;5289:9;5285:18;5266:38;:::i;:::-;5256:48;-1:-1:-1;5355:2:54;5340:18;;5327:32;-1:-1:-1;;;;;5408:14:54;;;5405:34;;;5435:1;5432;5425:12;5405:34;5458:49;5499:7;5490:6;5479:9;5475:22;5458:49;:::i;:::-;5448:59;;5560:3;5549:9;5545:19;5532:33;5516:49;;5590:2;5580:8;5577:16;5574:36;;;5606:1;5603;5596:12;5574:36;5629:51;5672:7;5661:8;5650:9;5646:24;5629:51;:::i;:::-;5619:61;;5733:3;5722:9;5718:19;5705:33;5689:49;;5763:2;5753:8;5750:16;5747:36;;;5779:1;5776;5769:12;5747:36;-1:-1:-1;5802:24:54;;5857:4;5849:13;;5845:27;-1:-1:-1;5835:55:54;;5886:1;5883;5876:12;5835:55;5909:73;5974:7;5969:2;5956:16;5951:2;5947;5943:11;5909:73;:::i;:::-;5899:83;;;4908:1080;;;;;;;;:::o;6175:462::-;6261:6;6269;6277;6330:2;6318:9;6309:7;6305:23;6301:32;6298:52;;;6346:1;6343;6336:12;6298:52;6369:29;6388:9;6369:29;:::i;:::-;6359:39;-1:-1:-1;6445:2:54;6430:18;;6417:32;;-1:-1:-1;6500:2:54;6485:18;;6472:32;-1:-1:-1;;;;;6516:30:54;;6513:50;;;6559:1;6556;6549:12;6513:50;6582:49;6623:7;6614:6;6603:9;6599:22;6582:49;:::i;:::-;6572:59;;;6175:462;;;;;:::o;6824:186::-;6883:6;6936:2;6924:9;6915:7;6911:23;6907:32;6904:52;;;6952:1;6949;6942:12;6904:52;6975:29;6994:9;6975:29;:::i;7015:785::-;7340:6;7329:9;7322:25;7383:6;7378:2;7367:9;7363:18;7356:34;7455:1;7451;7446:3;7442:11;7438:19;7430:6;7426:32;7421:2;7410:9;7406:18;7399:60;7495:3;7490:2;7479:9;7475:18;7468:31;7303:4;7522:46;7563:3;7552:9;7548:19;7540:6;7522:46;:::i;:::-;7617:9;7609:6;7605:22;7599:3;7588:9;7584:19;7577:51;7651:33;7677:6;7669;7651:33;:::i;:::-;7637:47;;7733:9;7725:6;7721:22;7715:3;7704:9;7700:19;7693:51;7761:33;7787:6;7779;7761:33;:::i;:::-;7753:41;7015:785;-1:-1:-1;;;;;;;;;7015:785:54:o;7805:261::-;7984:2;7973:9;7966:21;7947:4;8004:56;8056:2;8045:9;8041:18;8033:6;8004:56;:::i;8071:415::-;8273:2;8255:21;;;8312:2;8292:18;;;8285:30;8351:34;8346:2;8331:18;;8324:62;-1:-1:-1;;;8417:2:54;8402:18;;8395:49;8476:3;8461:19;;8071:415::o;8491:203::-;-1:-1:-1;;;;;8655:32:54;;;;8637:51;;8625:2;8610:18;;8491:203::o;8699:412::-;8901:2;8883:21;;;8940:2;8920:18;;;8913:30;-1:-1:-1;;;;;;;;;;;8974:2:54;8959:18;;8952:62;-1:-1:-1;;;9045:2:54;9030:18;;9023:46;9101:3;9086:19;;8699:412::o;9116:127::-;9177:10;9172:3;9168:20;9165:1;9158:31;9208:4;9205:1;9198:15;9232:4;9229:1;9222:15;9650:127;9711:10;9706:3;9702:20;9699:1;9692:31;9742:4;9739:1;9732:15;9766:4;9763:1;9756:15;9782:135;9821:3;9842:17;;;9839:43;;9862:18;;:::i;:::-;-1:-1:-1;9909:1:54;9898:13;;9782:135::o;10746:128::-;10813:9;;;10834:11;;;10831:37;;;10848:18;;:::i;10879:127::-;10940:10;10935:3;10931:20;10928:1;10921:31;10971:4;10968:1;10961:15;10995:4;10992:1;10985:15;11011:380;11090:1;11086:12;;;;11133;;;11154:61;;11208:4;11200:6;11196:17;11186:27;;11154:61;11261:2;11253:6;11250:14;11230:18;11227:38;11224:161;;11307:10;11302:3;11298:20;11295:1;11288:31;11342:4;11339:1;11332:15;11370:4;11367:1;11360:15;11224:161;;11011:380;;;:::o;11521:771::-;11570:3;11611:5;11605:12;11640:36;11666:9;11640:36;:::i;:::-;11685:19;;;11723:4;11746:1;11763:18;;;11790:146;;;;11950:1;11945:341;;;;11756:530;;11790:146;-1:-1:-1;;11832:24:54;;11818:12;;;11811:46;11904:14;;11897:22;11894:1;11890:30;11881:40;;11877:49;;;-1:-1:-1;11790:146:54;;11945:341;11976:5;11973:1;11966:16;12023:2;12020:1;12010:16;12048:1;12062:174;12076:6;12073:1;12070:13;12062:174;;;12163:14;;12145:11;;;12141:20;;12134:44;12206:16;;;;12091:10;;12062:174;;;12260:11;;12256:20;;;-1:-1:-1;;11756:530:54;;;;;;11521:771;;;;:::o;12297:627::-;12557:6;12546:9;12539:25;12600:3;12595:2;12584:9;12580:18;12573:31;12520:4;12627:53;12675:3;12664:9;12660:19;12652:6;12627:53;:::i;:::-;12728:9;12720:6;12716:22;12711:2;12700:9;12696:18;12689:50;12762:40;12795:6;12787;12762:40;:::i;:::-;12748:54;;12850:9;12842:6;12838:22;12833:2;12822:9;12818:18;12811:50;12878:40;12911:6;12903;12878:40;:::i;13331:406::-;13533:2;13515:21;;;13572:2;13552:18;;;13545:30;13611:34;13606:2;13591:18;;13584:62;-1:-1:-1;;;13677:2:54;13662:18;;13655:40;13727:3;13712:19;;13331:406::o;14102:310::-;14280:2;14269:9;14262:21;14243:4;14300:52;14348:2;14337:9;14333:18;14325:6;14300:52;:::i;:::-;14292:60;;14400:4;14392:6;14388:17;14383:2;14372:9;14368:18;14361:45;14102:310;;;;;:::o;14417:287::-;14546:3;14584:6;14578:13;14600:66;14659:6;14654:3;14647:4;14639:6;14635:17;14600:66;:::i;:::-;14682:16;;;;;14417:287;-1:-1:-1;;14417:287:54:o;14709:222::-;14853:2;14842:9;14835:21;14816:4;14873:52;14921:2;14910:9;14906:18;14898:6;14873:52;:::i;15634:544::-;15735:2;15730:3;15727:11;15724:448;;;15771:1;15796:5;15792:2;15785:17;15841:4;15837:2;15827:19;15911:2;15899:10;15895:19;15892:1;15888:27;15882:4;15878:38;15947:4;15935:10;15932:20;15929:47;;;-1:-1:-1;15970:4:54;15929:47;16025:2;16020:3;16016:12;16013:1;16009:20;16003:4;15999:31;15989:41;;16080:82;16098:2;16091:5;16088:13;16080:82;;;16143:17;;;16124:1;16113:13;16080:82;;;16084:3;;;15724:448;15634:544;;;:::o;16354:1348::-;16472:10;;-1:-1:-1;;;;;16494:30:54;;16491:56;;;16527:18;;:::i;:::-;16556:96;16645:6;16605:38;16637:4;16631:11;16605:38;:::i;:::-;16599:4;16556:96;:::i;:::-;16707:4;;16771:2;16760:14;;16788:1;16783:662;;;;17489:1;17506:6;17503:89;;;-1:-1:-1;17558:19:54;;;17552:26;17503:89;-1:-1:-1;;16311:1:54;16307:11;;;16303:24;16299:29;16289:40;16335:1;16331:11;;;16286:57;17605:81;;16753:943;;16783:662;11468:1;11461:14;;;11505:4;11492:18;;-1:-1:-1;;16819:20:54;;;16936:236;16950:7;16947:1;16944:14;16936:236;;;17039:19;;;17033:26;17018:42;;17131:27;;;;17099:1;17087:14;;;;16966:19;;16936:236;;;16940:3;17200:6;17191:7;17188:19;17185:201;;;17261:19;;;17255:26;-1:-1:-1;;17344:1:54;17340:14;;;17356:3;17336:24;17332:37;17328:42;17313:58;17298:74;;17185:201;-1:-1:-1;;;;;17432:1:54;17416:14;;;17412:22;17399:36;;-1:-1:-1;16354:1348:54:o;19062:615::-;19331:6;19320:9;19313:25;19374:3;19369:2;19358:9;19354:18;19347:31;19294:4;19401:46;19442:3;19431:9;19427:19;19419:6;19401:46;:::i;:::-;19495:9;19487:6;19483:22;19478:2;19467:9;19463:18;19456:50;19529:33;19555:6;19547;19529:33;:::i;:::-;19515:47;;19610:9;19602:6;19598:22;19593:2;19582:9;19578:18;19571:50;19638:33;19664:6;19656;19638:33;:::i",
  "source": "// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.0;\n\nimport \"./interface/IIdentity.sol\";\nimport \"./version/Version.sol\";\nimport \"./storage/Storage.sol\";\n\n/**\n * @dev Implementation of the `IERC734` \"KeyHolder\" and the `IERC735` \"ClaimHolder\" interfaces into a common Identity Contract.\n * This implementation has a separate contract were it declares all storage, allowing for it to be used as an upgradable logic contract.\n */\ncontract Identity is Storage, IIdentity, Version {\n    bool private initialized = false;\n    bool private canInteract = true;\n\n    constructor(address initialManagementKey, bool _isLibrary) {\n        canInteract = !_isLibrary;\n\n        if (canInteract) {\n            __Identity_init(initialManagementKey);\n        } else {\n            initialized = true;\n        }\n    }\n\n    /**\n     * @notice Prevent any direct calls to the implementation contract (marked by canInteract = false).\n     */\n    modifier delegatedOnly() {\n        require(canInteract == true, \"Interacting with the library contract is forbidden.\");\n        _;\n    }\n\n    /**\n     * @notice When using this contract as an implementation for a proxy, call this initializer with a delegatecall.\n     *\n     * @param initialManagementKey The ethereum address to be set as the management key of the ONCHAINID.\n     */\n    function initialize(address initialManagementKey) public {\n        __Identity_init(initialManagementKey);\n    }\n\n    /**\n     * @notice Computes if the context in which the function is called is a constructor or not.\n     *\n     * @return true if the context is a constructor.\n     */\n    function _isConstructor() private view returns (bool) {\n        address self = address(this);\n        uint256 cs;\n        // solhint-disable-next-line no-inline-assembly\n        assembly { cs := extcodesize(self) }\n        return cs == 0;\n    }\n\n    /**\n     * @notice Initializer internal function for the Identity contract.\n     *\n     * @param initialManagementKey The ethereum address to be set as the management key of the ONCHAINID.\n     */\n    // solhint-disable-next-line func-name-mixedcase\n    function __Identity_init(address initialManagementKey) internal {\n        require(!initialized || _isConstructor(), \"Initial key was already setup.\");\n        initialized = true;\n        canInteract = true;\n\n        bytes32 _key = keccak256(abi.encode(initialManagementKey));\n        keys[_key].key = _key;\n        keys[_key].purposes = [1];\n        keys[_key].keyType = 1;\n        keysByPurpose[1].push(_key);\n        emit KeyAdded(_key, 1, 1);\n    }\n\n    /**\n     * @notice Implementation of the getKey function from the ERC-734 standard\n     *\n     * @param _key The public key.  for non-hex and long keys, its the Keccak256 hash of the key\n     *\n     * @return purposes Returns the full key data, if present in the identity.\n     * @return keyType Returns the full key data, if present in the identity.\n     * @return key Returns the full key data, if present in the identity.\n     */\n    function getKey(bytes32 _key)\n    public\n    override\n    view\n    returns(uint256[] memory purposes, uint256 keyType, bytes32 key)\n    {\n        return (keys[_key].purposes, keys[_key].keyType, keys[_key].key);\n    }\n\n    /**\n    * @notice gets the purposes of a key\n    *\n    * @param _key The public key.  for non-hex and long keys, its the Keccak256 hash of the key\n    *\n    * @return _purposes Returns the purposes of the specified key\n    */\n    function getKeyPurposes(bytes32 _key)\n    public\n    override\n    view\n    returns(uint256[] memory _purposes)\n    {\n        return (keys[_key].purposes);\n    }\n\n    /**\n        * @notice gets all the keys with a specific purpose from an identity\n        *\n        * @param _purpose a uint256[] Array of the key types, like 1 = MANAGEMENT, 2 = ACTION, 3 = CLAIM, 4 = ENCRYPTION\n        *\n        * @return _keys Returns an array of public key bytes32 hold by this identity and having the specified purpose\n        */\n    function getKeysByPurpose(uint256 _purpose)\n    public\n    override\n    view\n    returns(bytes32[] memory _keys)\n    {\n        return keysByPurpose[_purpose];\n    }\n\n    /**\n    * @notice implementation of the addKey function of the ERC-734 standard\n    * Adds a _key to the identity. The _purpose specifies the purpose of key. Initially we propose four purposes:\n    * 1: MANAGEMENT keys, which can manage the identity\n    * 2: ACTION keys, which perform actions in this identities name (signing, logins, transactions, etc.)\n    * 3: CLAIM signer keys, used to sign claims on other identities which need to be revokable.\n    * 4: ENCRYPTION keys, used to encrypt data e.g. hold in claims.\n    * MUST only be done by keys of purpose 1, or the identity itself.\n    * If its the identity itself, the approval process will determine its approval.\n    *\n    * @param _key keccak256 representation of an ethereum address\n    * @param _type type of key used, which would be a uint256 for different key types. e.g. 1 = ECDSA, 2 = RSA, etc.\n    * @param _purpose a uint256[] Array of the key types, like 1 = MANAGEMENT, 2 = ACTION, 3 = CLAIM, 4 = ENCRYPTION\n    *\n    * @return success Returns TRUE if the addition was successful and FALSE if not\n    */\n    function addKey(bytes32 _key, uint256 _purpose, uint256 _type)\n    public\n    delegatedOnly\n    override\n    returns (bool success)\n    {\n        if (msg.sender != address(this)) {\n            require(keyHasPurpose(keccak256(abi.encode(msg.sender)), 1), \"Permissions: Sender does not have management key\");\n        }\n\n        if (keys[_key].key == _key) {\n            for (uint keyPurposeIndex = 0; keyPurposeIndex < keys[_key].purposes.length; keyPurposeIndex++) {\n                uint256 purpose = keys[_key].purposes[keyPurposeIndex];\n\n                if (purpose == _purpose) {\n                    revert(\"Conflict: Key already has purpose\");\n                }\n            }\n\n            keys[_key].purposes.push(_purpose);\n        } else {\n            keys[_key].key = _key;\n            keys[_key].purposes = [_purpose];\n            keys[_key].keyType = _type;\n        }\n\n        keysByPurpose[_purpose].push(_key);\n\n        emit KeyAdded(_key, _purpose, _type);\n\n        return true;\n    }\n\n    /**\n     * @notice Approves an execution or claim addition.\n     * This SHOULD require n of m approvals of keys purpose 1, if the _to of the execution is the identity contract itself, to successfully approve an execution.\n     * And COULD require n of m approvals of keys purpose 2, if the _to of the execution is another contract, to successfully approve an execution.\n     */\n    function approve(uint256 _id, bool _approve)\n    public\n    delegatedOnly\n    override\n    returns (bool success)\n    {\n        require(keyHasPurpose(keccak256(abi.encode(msg.sender)), 2), \"Sender does not have action key\");\n\n        emit Approved(_id, _approve);\n\n        if (_approve == true) {\n            executions[_id].approved = true;\n\n            (success,) = executions[_id].to.call{value:(executions[_id].value)}(abi.encode(executions[_id].data, 0));\n\n            if (success) {\n                executions[_id].executed = true;\n\n                emit Executed(\n                    _id,\n                    executions[_id].to,\n                    executions[_id].value,\n                    executions[_id].data\n                );\n\n                return true;\n            } else {\n                emit ExecutionFailed(\n                    _id,\n                    executions[_id].to,\n                    executions[_id].value,\n                    executions[_id].data\n                );\n\n                return false;\n            }\n        } else {\n            executions[_id].approved = false;\n        }\n        return true;\n    }\n\n    /**\n     * @notice Passes an execution instruction to the keymanager.\n     * SHOULD require approve to be called with one or more keys of purpose 1 or 2 to approve this execution.\n     * Execute COULD be used as the only accessor for addKey, removeKey and replaceKey and removeClaim.\n     *\n     * @return executionId SHOULD be sent to the approve function, to approve or reject this execution.\n     */\n    function execute(address _to, uint256 _value, bytes memory _data)\n    public\n    delegatedOnly\n    override\n    payable\n    returns (uint256 executionId)\n    {\n        require(!executions[executionNonce].executed, \"Already executed\");\n        executions[executionNonce].to = _to;\n        executions[executionNonce].value = _value;\n        executions[executionNonce].data = _data;\n\n        emit ExecutionRequested(executionNonce, _to, _value, _data);\n\n        if (keyHasPurpose(keccak256(abi.encode(msg.sender)), 2)) {\n            approve(executionNonce, true);\n        }\n\n        executionNonce++;\n        return executionNonce-1;\n    }\n\n    /**\n    * @notice Remove the purpose from a key.\n    */\n    function removeKey(bytes32 _key, uint256 _purpose)\n    public\n    delegatedOnly\n    override\n    returns (bool success)\n    {\n        require(keys[_key].key == _key, \"NonExisting: Key isn't registered\");\n\n        if (msg.sender != address(this)) {\n            require(keyHasPurpose(keccak256(abi.encode(msg.sender)), 1), \"Permissions: Sender does not have management key\"); // Sender has MANAGEMENT_KEY\n        }\n\n        require(keys[_key].purposes.length > 0, \"NonExisting: Key doesn't have such purpose\");\n\n        uint purposeIndex = 0;\n        while (keys[_key].purposes[purposeIndex] != _purpose) {\n            purposeIndex++;\n\n            if (purposeIndex >= keys[_key].purposes.length) {\n                break;\n            }\n        }\n\n        require(purposeIndex < keys[_key].purposes.length, \"NonExisting: Key doesn't have such purpose\");\n\n        keys[_key].purposes[purposeIndex] = keys[_key].purposes[keys[_key].purposes.length - 1];\n        keys[_key].purposes.pop();\n\n        uint keyIndex = 0;\n\n        while (keysByPurpose[_purpose][keyIndex] != _key) {\n            keyIndex++;\n        }\n\n        keysByPurpose[_purpose][keyIndex] = keysByPurpose[_purpose][keysByPurpose[_purpose].length - 1];\n        keysByPurpose[_purpose].pop();\n\n        uint keyType = keys[_key].keyType;\n\n        if (keys[_key].purposes.length == 0) {\n            delete keys[_key];\n        }\n\n        emit KeyRemoved(_key, _purpose, keyType);\n\n        return true;\n    }\n\n\n    /**\n    * @notice Returns true if the key has MANAGEMENT purpose or the specified purpose.\n    */\n    function keyHasPurpose(bytes32 _key, uint256 _purpose)\n    public\n    override\n    view\n    returns(bool result)\n    {\n        Key memory key = keys[_key];\n        if (key.key == 0) return false;\n\n        for (uint keyPurposeIndex = 0; keyPurposeIndex < key.purposes.length; keyPurposeIndex++) {\n            uint256 purpose = key.purposes[keyPurposeIndex];\n\n            if (purpose == 1 || purpose == _purpose) return true;\n        }\n\n        return false;\n    }\n\n    /**\n    * @notice Implementation of the addClaim function from the ERC-735 standard\n    *  Require that the msg.sender has claim signer key.\n    *\n    * @param _topic The type of claim\n    * @param _scheme The scheme with which this claim SHOULD be verified or how it should be processed.\n    * @param _issuer The issuers identity contract address, or the address used to sign the above signature.\n    * @param _signature Signature which is the proof that the claim issuer issued a claim of topic for this identity.\n    * it MUST be a signed message of the following structure: keccak256(abi.encode(address identityHolder_address, uint256 _ topic, bytes data))\n    * @param _data The hash of the claim data, sitting in another location, a bit-mask, call data, or actual data based on the claim scheme.\n    * @param _uri The location of the claim, this can be HTTP links, swarm hashes, IPFS hashes, and such.\n    *\n    * @return claimRequestId Returns claimRequestId: COULD be send to the approve function, to approve or reject this claim.\n    * triggers ClaimAdded event.\n    */\n    function addClaim(\n        uint256 _topic,\n        uint256 _scheme,\n        address _issuer,\n        bytes memory _signature,\n        bytes memory _data,\n        string memory _uri\n    )\n    public\n    delegatedOnly\n    override\n    returns (bytes32 claimRequestId)\n    {\n        bytes32 claimId = keccak256(abi.encode(_issuer, _topic));\n\n        if (msg.sender != address(this)) {\n            require(keyHasPurpose(keccak256(abi.encode(msg.sender)), 3), \"Permissions: Sender does not have claim signer key\");\n        }\n\n        if (claims[claimId].issuer != _issuer) {\n            claimsByTopic[_topic].push(claimId);\n            claims[claimId].topic = _topic;\n            claims[claimId].scheme = _scheme;\n            claims[claimId].issuer = _issuer;\n            claims[claimId].signature = _signature;\n            claims[claimId].data = _data;\n            claims[claimId].uri = _uri;\n\n            emit ClaimAdded(\n                claimId,\n                _topic,\n                _scheme,\n                _issuer,\n                _signature,\n                _data,\n                _uri\n            );\n        } else {\n            claims[claimId].topic = _topic;\n            claims[claimId].scheme = _scheme;\n            claims[claimId].issuer = _issuer;\n            claims[claimId].signature = _signature;\n            claims[claimId].data = _data;\n            claims[claimId].uri = _uri;\n\n            emit ClaimChanged(\n                claimId,\n                _topic,\n                _scheme,\n                _issuer,\n                _signature,\n                _data,\n                _uri\n            );\n        }\n\n        return claimId;\n    }\n\n    /**\n    * @notice Implementation of the removeClaim function from the ERC-735 standard\n    * Require that the msg.sender has management key.\n    * Can only be removed by the claim issuer, or the claim holder itself.\n    *\n    * @param _claimId The identity of the claim i.e. keccak256(abi.encode(_issuer, _topic))\n    *\n    * @return success Returns TRUE when the claim was removed.\n    * triggers ClaimRemoved event\n    */\n    function removeClaim(bytes32 _claimId) public delegatedOnly override returns (bool success) {\n        if (msg.sender != address(this)) {\n            require(keyHasPurpose(keccak256(abi.encode(msg.sender)), 3), \"Permissions: Sender does not have CLAIM key\");\n        }\n\n        if (claims[_claimId].topic == 0) {\n            revert(\"NonExisting: There is no claim with this ID\");\n        }\n\n        uint claimIndex = 0;\n        while (claimsByTopic[claims[_claimId].topic][claimIndex] != _claimId) {\n            claimIndex++;\n        }\n\n        claimsByTopic[claims[_claimId].topic][claimIndex] = claimsByTopic[claims[_claimId].topic][claimsByTopic[claims[_claimId].topic].length - 1];\n        claimsByTopic[claims[_claimId].topic].pop();\n\n        emit ClaimRemoved(\n            _claimId,\n            claims[_claimId].topic,\n            claims[_claimId].scheme,\n            claims[_claimId].issuer,\n            claims[_claimId].signature,\n            claims[_claimId].data,\n            claims[_claimId].uri\n        );\n\n        delete claims[_claimId];\n\n        return true;\n    }\n\n    /**\n    * @notice Implementation of the getClaim function from the ERC-735 standard.\n    *\n    * @param _claimId The identity of the claim i.e. keccak256(abi.encode(_issuer, _topic))\n    *\n    * @return topic Returns all the parameters of the claim for the specified _claimId (topic, scheme, signature, issuer, data, uri) .\n    * @return scheme Returns all the parameters of the claim for the specified _claimId (topic, scheme, signature, issuer, data, uri) .\n    * @return issuer Returns all the parameters of the claim for the specified _claimId (topic, scheme, signature, issuer, data, uri) .\n    * @return signature Returns all the parameters of the claim for the specified _claimId (topic, scheme, signature, issuer, data, uri) .\n    * @return data Returns all the parameters of the claim for the specified _claimId (topic, scheme, signature, issuer, data, uri) .\n    * @return uri Returns all the parameters of the claim for the specified _claimId (topic, scheme, signature, issuer, data, uri) .\n    */\n    function getClaim(bytes32 _claimId)\n    public\n    override\n    view\n    returns(\n        uint256 topic,\n        uint256 scheme,\n        address issuer,\n        bytes memory signature,\n        bytes memory data,\n        string memory uri\n    )\n    {\n        return (\n            claims[_claimId].topic,\n            claims[_claimId].scheme,\n            claims[_claimId].issuer,\n            claims[_claimId].signature,\n            claims[_claimId].data,\n            claims[_claimId].uri\n        );\n    }\n\n    /**\n    * @notice Implementation of the getClaimIdsByTopic function from the ERC-735 standard.\n    * used to get all the claims from the specified topic\n    *\n    * @param _topic The identity of the claim i.e. keccak256(abi.encode(_issuer, _topic))\n    *\n    * @return claimIds Returns an array of claim IDs by topic.\n    */\n    function getClaimIdsByTopic(uint256 _topic)\n    public\n    override\n    view\n    returns(bytes32[] memory claimIds)\n    {\n        return claimsByTopic[_topic];\n    }\n}\n",
  "sourcePath": "@onchain-id/solidity/contracts/Identity.sol",
  "ast": {
    "absolutePath": "@onchain-id/solidity/contracts/Identity.sol",
    "exportedSymbols": {
      "IERC734": [
        1609
      ],
      "IERC735": [
        1734
      ],
      "IIdentity": [
        1743
      ],
      "Identity": [
        1411
      ],
      "Storage": [
        1776
      ],
      "Structs": [
        1811
      ],
      "Version": [
        1824
      ]
    },
    "id": 1412,
    "license": "GPL-3.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 241,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "36:23:1"
      },
      {
        "absolutePath": "@onchain-id/solidity/contracts/interface/IIdentity.sol",
        "file": "./interface/IIdentity.sol",
        "id": 242,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 1412,
        "sourceUnit": 1744,
        "src": "61:35:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@onchain-id/solidity/contracts/version/Version.sol",
        "file": "./version/Version.sol",
        "id": 243,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 1412,
        "sourceUnit": 1825,
        "src": "97:31:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@onchain-id/solidity/contracts/storage/Storage.sol",
        "file": "./storage/Storage.sol",
        "id": 244,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 1412,
        "sourceUnit": 1777,
        "src": "129:31:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 246,
              "name": "Storage",
              "nameLocations": [
                "456:7:1"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 1776,
              "src": "456:7:1"
            },
            "id": 247,
            "nodeType": "InheritanceSpecifier",
            "src": "456:7:1"
          },
          {
            "baseName": {
              "id": 248,
              "name": "IIdentity",
              "nameLocations": [
                "465:9:1"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 1743,
              "src": "465:9:1"
            },
            "id": 249,
            "nodeType": "InheritanceSpecifier",
            "src": "465:9:1"
          },
          {
            "baseName": {
              "id": 250,
              "name": "Version",
              "nameLocations": [
                "476:7:1"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 1824,
              "src": "476:7:1"
            },
            "id": 251,
            "nodeType": "InheritanceSpecifier",
            "src": "476:7:1"
          }
        ],
        "canonicalName": "Identity",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 245,
          "nodeType": "StructuredDocumentation",
          "src": "162:272:1",
          "text": " @dev Implementation of the `IERC734` \"KeyHolder\" and the `IERC735` \"ClaimHolder\" interfaces into a common Identity Contract.\n This implementation has a separate contract were it declares all storage, allowing for it to be used as an upgradable logic contract."
        },
        "fullyImplemented": true,
        "id": 1411,
        "linearizedBaseContracts": [
          1411,
          1824,
          1743,
          1734,
          1609,
          1776,
          1811
        ],
        "name": "Identity",
        "nameLocation": "444:8:1",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 254,
            "mutability": "mutable",
            "name": "initialized",
            "nameLocation": "503:11:1",
            "nodeType": "VariableDeclaration",
            "scope": 1411,
            "src": "490:32:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 252,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "490:4:1",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "value": {
              "hexValue": "66616c7365",
              "id": 253,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "bool",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "517:5:1",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              },
              "value": "false"
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 257,
            "mutability": "mutable",
            "name": "canInteract",
            "nameLocation": "541:11:1",
            "nodeType": "VariableDeclaration",
            "scope": 1411,
            "src": "528:31:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 255,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "528:4:1",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "value": {
              "hexValue": "74727565",
              "id": 256,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "bool",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "555:4:1",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              },
              "value": "true"
            },
            "visibility": "private"
          },
          {
            "body": {
              "id": 281,
              "nodeType": "Block",
              "src": "625:180:1",
              "statements": [
                {
                  "expression": {
                    "id": 267,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 264,
                      "name": "canInteract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 257,
                      "src": "635:11:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 266,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "649:11:1",
                      "subExpression": {
                        "id": 265,
                        "name": "_isLibrary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 261,
                        "src": "650:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "635:25:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 268,
                  "nodeType": "ExpressionStatement",
                  "src": "635:25:1"
                },
                {
                  "condition": {
                    "id": 269,
                    "name": "canInteract",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 257,
                    "src": "675:11:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 279,
                    "nodeType": "Block",
                    "src": "756:43:1",
                    "statements": [
                      {
                        "expression": {
                          "id": 277,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 275,
                            "name": "initialized",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 254,
                            "src": "770:11:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "74727565",
                            "id": 276,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "784:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "770:18:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 278,
                        "nodeType": "ExpressionStatement",
                        "src": "770:18:1"
                      }
                    ]
                  },
                  "id": 280,
                  "nodeType": "IfStatement",
                  "src": "671:128:1",
                  "trueBody": {
                    "id": 274,
                    "nodeType": "Block",
                    "src": "688:62:1",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 271,
                              "name": "initialManagementKey",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 259,
                              "src": "718:20:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 270,
                            "name": "__Identity_init",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 395,
                            "src": "702:15:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 272,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "702:37:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 273,
                        "nodeType": "ExpressionStatement",
                        "src": "702:37:1"
                      }
                    ]
                  }
                }
              ]
            },
            "id": 282,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 262,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 259,
                  "mutability": "mutable",
                  "name": "initialManagementKey",
                  "nameLocation": "586:20:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 282,
                  "src": "578:28:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 258,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "578:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 261,
                  "mutability": "mutable",
                  "name": "_isLibrary",
                  "nameLocation": "613:10:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 282,
                  "src": "608:15:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 260,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "608:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "577:47:1"
            },
            "returnParameters": {
              "id": 263,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "625:0:1"
            },
            "scope": 1411,
            "src": "566:239:1",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 293,
              "nodeType": "Block",
              "src": "956:111:1",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 288,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 286,
                          "name": "canInteract",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 257,
                          "src": "974:11:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "74727565",
                          "id": 287,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "989:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "src": "974:19:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "496e746572616374696e67207769746820746865206c69627261727920636f6e747261637420697320666f7262696464656e2e",
                        "id": 289,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "995:53:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3c5bfa18ac85c8d1f4d8c63a7d33e2c24b63b20654ca46146bece560cc5642df",
                          "typeString": "literal_string \"Interacting with the library contract is forbidden.\""
                        },
                        "value": "Interacting with the library contract is forbidden."
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3c5bfa18ac85c8d1f4d8c63a7d33e2c24b63b20654ca46146bece560cc5642df",
                          "typeString": "literal_string \"Interacting with the library contract is forbidden.\""
                        }
                      ],
                      "id": 285,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "966:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 290,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "966:83:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 291,
                  "nodeType": "ExpressionStatement",
                  "src": "966:83:1"
                },
                {
                  "id": 292,
                  "nodeType": "PlaceholderStatement",
                  "src": "1059:1:1"
                }
              ]
            },
            "documentation": {
              "id": 283,
              "nodeType": "StructuredDocumentation",
              "src": "811:115:1",
              "text": " @notice Prevent any direct calls to the implementation contract (marked by canInteract = false)."
            },
            "id": 294,
            "name": "delegatedOnly",
            "nameLocation": "940:13:1",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 284,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "953:2:1"
            },
            "src": "931:136:1",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 304,
              "nodeType": "Block",
              "src": "1376:54:1",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 301,
                        "name": "initialManagementKey",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 297,
                        "src": "1402:20:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 300,
                      "name": "__Identity_init",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 395,
                      "src": "1386:15:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 302,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1386:37:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 303,
                  "nodeType": "ExpressionStatement",
                  "src": "1386:37:1"
                }
              ]
            },
            "documentation": {
              "id": 295,
              "nodeType": "StructuredDocumentation",
              "src": "1073:241:1",
              "text": " @notice When using this contract as an implementation for a proxy, call this initializer with a delegatecall.\n @param initialManagementKey The ethereum address to be set as the management key of the ONCHAINID."
            },
            "functionSelector": "c4d66de8",
            "id": 305,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "initialize",
            "nameLocation": "1328:10:1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 298,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 297,
                  "mutability": "mutable",
                  "name": "initialManagementKey",
                  "nameLocation": "1347:20:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 305,
                  "src": "1339:28:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 296,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1339:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1338:30:1"
            },
            "returnParameters": {
              "id": 299,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1376:0:1"
            },
            "scope": 1411,
            "src": "1319:111:1",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 326,
              "nodeType": "Block",
              "src": "1662:190:1",
              "statements": [
                {
                  "assignments": [
                    312
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 312,
                      "mutability": "mutable",
                      "name": "self",
                      "nameLocation": "1680:4:1",
                      "nodeType": "VariableDeclaration",
                      "scope": 326,
                      "src": "1672:12:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 311,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1672:7:1",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 317,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 315,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967268,
                        "src": "1695:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Identity_$1411",
                          "typeString": "contract Identity"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Identity_$1411",
                          "typeString": "contract Identity"
                        }
                      ],
                      "id": 314,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1687:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 313,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1687:7:1",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 316,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1687:13:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1672:28:1"
                },
                {
                  "assignments": [
                    319
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 319,
                      "mutability": "mutable",
                      "name": "cs",
                      "nameLocation": "1718:2:1",
                      "nodeType": "VariableDeclaration",
                      "scope": 326,
                      "src": "1710:10:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 318,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1710:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 320,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1710:10:1"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "1795:27:1",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "1797:23:1",
                        "value": {
                          "arguments": [
                            {
                              "name": "self",
                              "nodeType": "YulIdentifier",
                              "src": "1815:4:1"
                            }
                          ],
                          "functionName": {
                            "name": "extcodesize",
                            "nodeType": "YulIdentifier",
                            "src": "1803:11:1"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1803:17:1"
                        },
                        "variableNames": [
                          {
                            "name": "cs",
                            "nodeType": "YulIdentifier",
                            "src": "1797:2:1"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "london",
                  "externalReferences": [
                    {
                      "declaration": 319,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1797:2:1",
                      "valueSize": 1
                    },
                    {
                      "declaration": 312,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1815:4:1",
                      "valueSize": 1
                    }
                  ],
                  "id": 321,
                  "nodeType": "InlineAssembly",
                  "src": "1786:36:1"
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 324,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 322,
                      "name": "cs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 319,
                      "src": "1838:2:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 323,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1844:1:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "1838:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 310,
                  "id": 325,
                  "nodeType": "Return",
                  "src": "1831:14:1"
                }
              ]
            },
            "documentation": {
              "id": 306,
              "nodeType": "StructuredDocumentation",
              "src": "1436:167:1",
              "text": " @notice Computes if the context in which the function is called is a constructor or not.\n @return true if the context is a constructor."
            },
            "id": 327,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_isConstructor",
            "nameLocation": "1617:14:1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 307,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1631:2:1"
            },
            "returnParameters": {
              "id": 310,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 309,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 327,
                  "src": "1656:4:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 308,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1656:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1655:6:1"
            },
            "scope": 1411,
            "src": "1608:244:1",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 394,
              "nodeType": "Block",
              "src": "2176:387:1",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 338,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 335,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "2194:12:1",
                          "subExpression": {
                            "id": 334,
                            "name": "initialized",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 254,
                            "src": "2195:11:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 336,
                            "name": "_isConstructor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 327,
                            "src": "2210:14:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                              "typeString": "function () view returns (bool)"
                            }
                          },
                          "id": 337,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2210:16:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "2194:32:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "496e697469616c206b65792077617320616c72656164792073657475702e",
                        "id": 339,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2228:32:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f97b6c8710e53ddda282a80ef5956d499e3405b5bb60ff3bc53f8e99e471fc0e",
                          "typeString": "literal_string \"Initial key was already setup.\""
                        },
                        "value": "Initial key was already setup."
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f97b6c8710e53ddda282a80ef5956d499e3405b5bb60ff3bc53f8e99e471fc0e",
                          "typeString": "literal_string \"Initial key was already setup.\""
                        }
                      ],
                      "id": 333,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "2186:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 340,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2186:75:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 341,
                  "nodeType": "ExpressionStatement",
                  "src": "2186:75:1"
                },
                {
                  "expression": {
                    "id": 344,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 342,
                      "name": "initialized",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 254,
                      "src": "2271:11:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "74727565",
                      "id": 343,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2285:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "2271:18:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 345,
                  "nodeType": "ExpressionStatement",
                  "src": "2271:18:1"
                },
                {
                  "expression": {
                    "id": 348,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 346,
                      "name": "canInteract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 257,
                      "src": "2299:11:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "74727565",
                      "id": 347,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2313:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "2299:18:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 349,
                  "nodeType": "ExpressionStatement",
                  "src": "2299:18:1"
                },
                {
                  "assignments": [
                    351
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 351,
                      "mutability": "mutable",
                      "name": "_key",
                      "nameLocation": "2336:4:1",
                      "nodeType": "VariableDeclaration",
                      "scope": 394,
                      "src": "2328:12:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 350,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "2328:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 358,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 355,
                            "name": "initialManagementKey",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 330,
                            "src": "2364:20:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 353,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "2353:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 354,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberLocation": "2357:6:1",
                          "memberName": "encode",
                          "nodeType": "MemberAccess",
                          "src": "2353:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 356,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2353:32:1",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 352,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4294967288,
                      "src": "2343:9:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 357,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2343:43:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2328:58:1"
                },
                {
                  "expression": {
                    "id": 364,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 359,
                          "name": "keys",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1755,
                          "src": "2396:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Key_$1786_storage_$",
                            "typeString": "mapping(bytes32 => struct Structs.Key storage ref)"
                          }
                        },
                        "id": 361,
                        "indexExpression": {
                          "id": 360,
                          "name": "_key",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 351,
                          "src": "2401:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2396:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Key_$1786_storage",
                          "typeString": "struct Structs.Key storage ref"
                        }
                      },
                      "id": 362,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "2407:3:1",
                      "memberName": "key",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1785,
                      "src": "2396:14:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 363,
                      "name": "_key",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 351,
                      "src": "2413:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "2396:21:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 365,
                  "nodeType": "ExpressionStatement",
                  "src": "2396:21:1"
                },
                {
                  "expression": {
                    "id": 372,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 366,
                          "name": "keys",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1755,
                          "src": "2427:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Key_$1786_storage_$",
                            "typeString": "mapping(bytes32 => struct Structs.Key storage ref)"
                          }
                        },
                        "id": 368,
                        "indexExpression": {
                          "id": 367,
                          "name": "_key",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 351,
                          "src": "2432:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2427:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Key_$1786_storage",
                          "typeString": "struct Structs.Key storage ref"
                        }
                      },
                      "id": 369,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "2438:8:1",
                      "memberName": "purposes",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1781,
                      "src": "2427:19:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                        "typeString": "uint256[] storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "components": [
                        {
                          "hexValue": "31",
                          "id": 370,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2450:1:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        }
                      ],
                      "id": 371,
                      "isConstant": false,
                      "isInlineArray": true,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "2449:3:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint8_$1_memory_ptr",
                        "typeString": "uint8[1] memory"
                      }
                    },
                    "src": "2427:25:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                      "typeString": "uint256[] storage ref"
                    }
                  },
                  "id": 373,
                  "nodeType": "ExpressionStatement",
                  "src": "2427:25:1"
                },
                {
                  "expression": {
                    "id": 379,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 374,
                          "name": "keys",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1755,
                          "src": "2462:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Key_$1786_storage_$",
                            "typeString": "mapping(bytes32 => struct Structs.Key storage ref)"
                          }
                        },
                        "id": 376,
                        "indexExpression": {
                          "id": 375,
                          "name": "_key",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 351,
                          "src": "2467:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2462:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Key_$1786_storage",
                          "typeString": "struct Structs.Key storage ref"
                        }
                      },
                      "id": 377,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "2473:7:1",
                      "memberName": "keyType",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1783,
                      "src": "2462:18:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "31",
                      "id": 378,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2483:1:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "2462:22:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 380,
                  "nodeType": "ExpressionStatement",
                  "src": "2462:22:1"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 385,
                        "name": "_key",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 351,
                        "src": "2516:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "baseExpression": {
                          "id": 381,
                          "name": "keysByPurpose",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1760,
                          "src": "2494:13:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_array$_t_bytes32_$dyn_storage_$",
                            "typeString": "mapping(uint256 => bytes32[] storage ref)"
                          }
                        },
                        "id": 383,
                        "indexExpression": {
                          "hexValue": "31",
                          "id": 382,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2508:1:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2494:16:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                          "typeString": "bytes32[] storage ref"
                        }
                      },
                      "id": 384,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2511:4:1",
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "src": "2494:21:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_array$_t_bytes32_$dyn_storage_ptr_$_t_bytes32_$returns$__$bound_to$_t_array$_t_bytes32_$dyn_storage_ptr_$",
                        "typeString": "function (bytes32[] storage pointer,bytes32)"
                      }
                    },
                    "id": 386,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2494:27:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 387,
                  "nodeType": "ExpressionStatement",
                  "src": "2494:27:1"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 389,
                        "name": "_key",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 351,
                        "src": "2545:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "hexValue": "31",
                        "id": 390,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2551:1:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      {
                        "hexValue": "31",
                        "id": 391,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2554:1:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        }
                      ],
                      "id": 388,
                      "name": "KeyAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1507,
                      "src": "2536:8:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes32,uint256,uint256)"
                      }
                    },
                    "id": 392,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2536:20:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 393,
                  "nodeType": "EmitStatement",
                  "src": "2531:25:1"
                }
              ]
            },
            "documentation": {
              "id": 328,
              "nodeType": "StructuredDocumentation",
              "src": "1858:196:1",
              "text": " @notice Initializer internal function for the Identity contract.\n @param initialManagementKey The ethereum address to be set as the management key of the ONCHAINID."
            },
            "id": 395,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "__Identity_init",
            "nameLocation": "2121:15:1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 331,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 330,
                  "mutability": "mutable",
                  "name": "initialManagementKey",
                  "nameLocation": "2145:20:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 395,
                  "src": "2137:28:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 329,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2137:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2136:30:1"
            },
            "returnParameters": {
              "id": 332,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2176:0:1"
            },
            "scope": 1411,
            "src": "2112:451:1",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              1570
            ],
            "body": {
              "id": 423,
              "nodeType": "Block",
              "src": "3142:81:1",
              "statements": [
                {
                  "expression": {
                    "components": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 409,
                            "name": "keys",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1755,
                            "src": "3160:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Key_$1786_storage_$",
                              "typeString": "mapping(bytes32 => struct Structs.Key storage ref)"
                            }
                          },
                          "id": 411,
                          "indexExpression": {
                            "id": 410,
                            "name": "_key",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 398,
                            "src": "3165:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3160:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Key_$1786_storage",
                            "typeString": "struct Structs.Key storage ref"
                          }
                        },
                        "id": 412,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "3171:8:1",
                        "memberName": "purposes",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1781,
                        "src": "3160:19:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                          "typeString": "uint256[] storage ref"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 413,
                            "name": "keys",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1755,
                            "src": "3181:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Key_$1786_storage_$",
                              "typeString": "mapping(bytes32 => struct Structs.Key storage ref)"
                            }
                          },
                          "id": 415,
                          "indexExpression": {
                            "id": 414,
                            "name": "_key",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 398,
                            "src": "3186:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3181:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Key_$1786_storage",
                            "typeString": "struct Structs.Key storage ref"
                          }
                        },
                        "id": 416,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "3192:7:1",
                        "memberName": "keyType",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1783,
                        "src": "3181:18:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 417,
                            "name": "keys",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1755,
                            "src": "3201:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Key_$1786_storage_$",
                              "typeString": "mapping(bytes32 => struct Structs.Key storage ref)"
                            }
                          },
                          "id": 419,
                          "indexExpression": {
                            "id": 418,
                            "name": "_key",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 398,
                            "src": "3206:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3201:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Key_$1786_storage",
                            "typeString": "struct Structs.Key storage ref"
                          }
                        },
                        "id": 420,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "3212:3:1",
                        "memberName": "key",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1785,
                        "src": "3201:14:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "id": 421,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "3159:57:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_array$_t_uint256_$dyn_storage_$_t_uint256_$_t_bytes32_$",
                      "typeString": "tuple(uint256[] storage ref,uint256,bytes32)"
                    }
                  },
                  "functionReturnParameters": 408,
                  "id": 422,
                  "nodeType": "Return",
                  "src": "3152:64:1"
                }
              ]
            },
            "documentation": {
              "id": 396,
              "nodeType": "StructuredDocumentation",
              "src": "2569:432:1",
              "text": " @notice Implementation of the getKey function from the ERC-734 standard\n @param _key The public key.  for non-hex and long keys, its the Keccak256 hash of the key\n @return purposes Returns the full key data, if present in the identity.\n @return keyType Returns the full key data, if present in the identity.\n @return key Returns the full key data, if present in the identity."
            },
            "functionSelector": "12aaac70",
            "id": 424,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getKey",
            "nameLocation": "3015:6:1",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 400,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3051:8:1"
            },
            "parameters": {
              "id": 399,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 398,
                  "mutability": "mutable",
                  "name": "_key",
                  "nameLocation": "3030:4:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 424,
                  "src": "3022:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 397,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3022:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3021:14:1"
            },
            "returnParameters": {
              "id": 408,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 403,
                  "mutability": "mutable",
                  "name": "purposes",
                  "nameLocation": "3098:8:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 424,
                  "src": "3081:25:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 401,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "3081:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 402,
                    "nodeType": "ArrayTypeName",
                    "src": "3081:9:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 405,
                  "mutability": "mutable",
                  "name": "keyType",
                  "nameLocation": "3116:7:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 424,
                  "src": "3108:15:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 404,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3108:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 407,
                  "mutability": "mutable",
                  "name": "key",
                  "nameLocation": "3133:3:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 424,
                  "src": "3125:11:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 406,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3125:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3080:57:1"
            },
            "scope": 1411,
            "src": "3006:217:1",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              1579
            ],
            "body": {
              "id": 440,
              "nodeType": "Block",
              "src": "3574:45:1",
              "statements": [
                {
                  "expression": {
                    "components": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 434,
                            "name": "keys",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1755,
                            "src": "3592:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Key_$1786_storage_$",
                              "typeString": "mapping(bytes32 => struct Structs.Key storage ref)"
                            }
                          },
                          "id": 436,
                          "indexExpression": {
                            "id": 435,
                            "name": "_key",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 427,
                            "src": "3597:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3592:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Key_$1786_storage",
                            "typeString": "struct Structs.Key storage ref"
                          }
                        },
                        "id": 437,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "3603:8:1",
                        "memberName": "purposes",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1781,
                        "src": "3592:19:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                          "typeString": "uint256[] storage ref"
                        }
                      }
                    ],
                    "id": 438,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "3591:21:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                      "typeString": "uint256[] storage ref"
                    }
                  },
                  "functionReturnParameters": 433,
                  "id": 439,
                  "nodeType": "Return",
                  "src": "3584:28:1"
                }
              ]
            },
            "documentation": {
              "id": 425,
              "nodeType": "StructuredDocumentation",
              "src": "3229:225:1",
              "text": " @notice gets the purposes of a key\n @param _key The public key.  for non-hex and long keys, its the Keccak256 hash of the key\n @return _purposes Returns the purposes of the specified key"
            },
            "functionSelector": "fb307b34",
            "id": 441,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getKeyPurposes",
            "nameLocation": "3468:14:1",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 429,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3512:8:1"
            },
            "parameters": {
              "id": 428,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 427,
                  "mutability": "mutable",
                  "name": "_key",
                  "nameLocation": "3491:4:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 441,
                  "src": "3483:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 426,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3483:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3482:14:1"
            },
            "returnParameters": {
              "id": 433,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 432,
                  "mutability": "mutable",
                  "name": "_purposes",
                  "nameLocation": "3559:9:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 441,
                  "src": "3542:26:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 430,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "3542:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 431,
                    "nodeType": "ArrayTypeName",
                    "src": "3542:9:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3541:28:1"
            },
            "scope": 1411,
            "src": "3459:160:1",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              1588
            ],
            "body": {
              "id": 455,
              "nodeType": "Block",
              "src": "4097:47:1",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "id": 451,
                      "name": "keysByPurpose",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1760,
                      "src": "4114:13:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_array$_t_bytes32_$dyn_storage_$",
                        "typeString": "mapping(uint256 => bytes32[] storage ref)"
                      }
                    },
                    "id": 453,
                    "indexExpression": {
                      "id": 452,
                      "name": "_purpose",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 444,
                      "src": "4128:8:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4114:23:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                      "typeString": "bytes32[] storage ref"
                    }
                  },
                  "functionReturnParameters": 450,
                  "id": 454,
                  "nodeType": "Return",
                  "src": "4107:30:1"
                }
              ]
            },
            "documentation": {
              "id": 442,
              "nodeType": "StructuredDocumentation",
              "src": "3625:350:1",
              "text": " @notice gets all the keys with a specific purpose from an identity\n @param _purpose a uint256[] Array of the key types, like 1 = MANAGEMENT, 2 = ACTION, 3 = CLAIM, 4 = ENCRYPTION\n @return _keys Returns an array of public key bytes32 hold by this identity and having the specified purpose"
            },
            "functionSelector": "9010f726",
            "id": 456,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getKeysByPurpose",
            "nameLocation": "3989:16:1",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 446,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4039:8:1"
            },
            "parameters": {
              "id": 445,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 444,
                  "mutability": "mutable",
                  "name": "_purpose",
                  "nameLocation": "4014:8:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 456,
                  "src": "4006:16:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 443,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4006:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4005:18:1"
            },
            "returnParameters": {
              "id": 450,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 449,
                  "mutability": "mutable",
                  "name": "_keys",
                  "nameLocation": "4086:5:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 456,
                  "src": "4069:22:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 447,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "4069:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 448,
                    "nodeType": "ArrayTypeName",
                    "src": "4069:9:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4068:24:1"
            },
            "scope": 1411,
            "src": "3980:164:1",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              1535
            ],
            "body": {
              "id": 582,
              "nodeType": "Block",
              "src": "5366:859:1",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 477,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 471,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967281,
                        "src": "5380:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 472,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5384:6:1",
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "5380:10:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "id": 475,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967268,
                          "src": "5402:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Identity_$1411",
                            "typeString": "contract Identity"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_Identity_$1411",
                            "typeString": "contract Identity"
                          }
                        ],
                        "id": 474,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5394:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 473,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5394:7:1",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 476,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5394:13:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "5380:27:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 493,
                  "nodeType": "IfStatement",
                  "src": "5376:170:1",
                  "trueBody": {
                    "id": 492,
                    "nodeType": "Block",
                    "src": "5409:137:1",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "expression": {
                                            "id": 483,
                                            "name": "msg",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4294967281,
                                            "src": "5466:3:1",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_magic_message",
                                              "typeString": "msg"
                                            }
                                          },
                                          "id": 484,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberLocation": "5470:6:1",
                                          "memberName": "sender",
                                          "nodeType": "MemberAccess",
                                          "src": "5466:10:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "expression": {
                                          "id": 481,
                                          "name": "abi",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4294967295,
                                          "src": "5455:3:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_abi",
                                            "typeString": "abi"
                                          }
                                        },
                                        "id": 482,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "memberLocation": "5459:6:1",
                                        "memberName": "encode",
                                        "nodeType": "MemberAccess",
                                        "src": "5455:10:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                          "typeString": "function () pure returns (bytes memory)"
                                        }
                                      },
                                      "id": 485,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "5455:22:1",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    ],
                                    "id": 480,
                                    "name": "keccak256",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4294967288,
                                    "src": "5445:9:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                      "typeString": "function (bytes memory) pure returns (bytes32)"
                                    }
                                  },
                                  "id": 486,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5445:33:1",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "hexValue": "31",
                                  "id": 487,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5480:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  }
                                ],
                                "id": 479,
                                "name": "keyHasPurpose",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1036,
                                "src": "5431:13:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (bytes32,uint256) view returns (bool)"
                                }
                              },
                              "id": 488,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5431:51:1",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "5065726d697373696f6e733a2053656e64657220646f6573206e6f742068617665206d616e6167656d656e74206b6579",
                              "id": 489,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5484:50:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_6f6b3247450dc94fc6574303b07d6b95320782b0ece8a8d742601c64b874e995",
                                "typeString": "literal_string \"Permissions: Sender does not have management key\""
                              },
                              "value": "Permissions: Sender does not have management key"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_6f6b3247450dc94fc6574303b07d6b95320782b0ece8a8d742601c64b874e995",
                                "typeString": "literal_string \"Permissions: Sender does not have management key\""
                              }
                            ],
                            "id": 478,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967278,
                              4294967278
                            ],
                            "referencedDeclaration": 4294967278,
                            "src": "5423:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 490,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5423:112:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 491,
                        "nodeType": "ExpressionStatement",
                        "src": "5423:112:1"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 499,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 494,
                          "name": "keys",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1755,
                          "src": "5560:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Key_$1786_storage_$",
                            "typeString": "mapping(bytes32 => struct Structs.Key storage ref)"
                          }
                        },
                        "id": 496,
                        "indexExpression": {
                          "id": 495,
                          "name": "_key",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 459,
                          "src": "5565:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5560:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Key_$1786_storage",
                          "typeString": "struct Structs.Key storage ref"
                        }
                      },
                      "id": 497,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5571:3:1",
                      "memberName": "key",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1785,
                      "src": "5560:14:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "id": 498,
                      "name": "_key",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 459,
                      "src": "5578:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "5560:22:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 565,
                    "nodeType": "Block",
                    "src": "5973:132:1",
                    "statements": [
                      {
                        "expression": {
                          "id": 548,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 543,
                                "name": "keys",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1755,
                                "src": "5987:4:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Key_$1786_storage_$",
                                  "typeString": "mapping(bytes32 => struct Structs.Key storage ref)"
                                }
                              },
                              "id": 545,
                              "indexExpression": {
                                "id": 544,
                                "name": "_key",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 459,
                                "src": "5992:4:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "5987:10:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Key_$1786_storage",
                                "typeString": "struct Structs.Key storage ref"
                              }
                            },
                            "id": 546,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "5998:3:1",
                            "memberName": "key",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1785,
                            "src": "5987:14:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 547,
                            "name": "_key",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 459,
                            "src": "6004:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "5987:21:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 549,
                        "nodeType": "ExpressionStatement",
                        "src": "5987:21:1"
                      },
                      {
                        "expression": {
                          "id": 556,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 550,
                                "name": "keys",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1755,
                                "src": "6022:4:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Key_$1786_storage_$",
                                  "typeString": "mapping(bytes32 => struct Structs.Key storage ref)"
                                }
                              },
                              "id": 552,
                              "indexExpression": {
                                "id": 551,
                                "name": "_key",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 459,
                                "src": "6027:4:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6022:10:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Key_$1786_storage",
                                "typeString": "struct Structs.Key storage ref"
                              }
                            },
                            "id": 553,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "6033:8:1",
                            "memberName": "purposes",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1781,
                            "src": "6022:19:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                              "typeString": "uint256[] storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "components": [
                              {
                                "id": 554,
                                "name": "_purpose",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 461,
                                "src": "6045:8:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 555,
                            "isConstant": false,
                            "isInlineArray": true,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "6044:10:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$1_memory_ptr",
                              "typeString": "uint256[1] memory"
                            }
                          },
                          "src": "6022:32:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                            "typeString": "uint256[] storage ref"
                          }
                        },
                        "id": 557,
                        "nodeType": "ExpressionStatement",
                        "src": "6022:32:1"
                      },
                      {
                        "expression": {
                          "id": 563,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 558,
                                "name": "keys",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1755,
                                "src": "6068:4:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Key_$1786_storage_$",
                                  "typeString": "mapping(bytes32 => struct Structs.Key storage ref)"
                                }
                              },
                              "id": 560,
                              "indexExpression": {
                                "id": 559,
                                "name": "_key",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 459,
                                "src": "6073:4:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6068:10:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Key_$1786_storage",
                                "typeString": "struct Structs.Key storage ref"
                              }
                            },
                            "id": 561,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "6079:7:1",
                            "memberName": "keyType",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1783,
                            "src": "6068:18:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 562,
                            "name": "_type",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 463,
                            "src": "6089:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6068:26:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 564,
                        "nodeType": "ExpressionStatement",
                        "src": "6068:26:1"
                      }
                    ]
                  },
                  "id": 566,
                  "nodeType": "IfStatement",
                  "src": "5556:549:1",
                  "trueBody": {
                    "id": 542,
                    "nodeType": "Block",
                    "src": "5584:383:1",
                    "statements": [
                      {
                        "body": {
                          "id": 532,
                          "nodeType": "Block",
                          "src": "5694:214:1",
                          "statements": [
                            {
                              "assignments": [
                                515
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 515,
                                  "mutability": "mutable",
                                  "name": "purpose",
                                  "nameLocation": "5720:7:1",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 532,
                                  "src": "5712:15:1",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 514,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5712:7:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 522,
                              "initialValue": {
                                "baseExpression": {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 516,
                                      "name": "keys",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1755,
                                      "src": "5730:4:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Key_$1786_storage_$",
                                        "typeString": "mapping(bytes32 => struct Structs.Key storage ref)"
                                      }
                                    },
                                    "id": 518,
                                    "indexExpression": {
                                      "id": 517,
                                      "name": "_key",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 459,
                                      "src": "5735:4:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "5730:10:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Key_$1786_storage",
                                      "typeString": "struct Structs.Key storage ref"
                                    }
                                  },
                                  "id": 519,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "5741:8:1",
                                  "memberName": "purposes",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1781,
                                  "src": "5730:19:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                                    "typeString": "uint256[] storage ref"
                                  }
                                },
                                "id": 521,
                                "indexExpression": {
                                  "id": 520,
                                  "name": "keyPurposeIndex",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 501,
                                  "src": "5750:15:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "5730:36:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "5712:54:1"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 525,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 523,
                                  "name": "purpose",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 515,
                                  "src": "5789:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "id": 524,
                                  "name": "_purpose",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 461,
                                  "src": "5800:8:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5789:19:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 531,
                              "nodeType": "IfStatement",
                              "src": "5785:109:1",
                              "trueBody": {
                                "id": 530,
                                "nodeType": "Block",
                                "src": "5810:84:1",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "hexValue": "436f6e666c6963743a204b657920616c72656164792068617320707572706f7365",
                                          "id": 527,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "string",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "5839:35:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_stringliteral_ced1bafc369b7e2b0ca5f6ed9c6c1eb753593d516580b4f3f74fc55e230be91e",
                                            "typeString": "literal_string \"Conflict: Key already has purpose\""
                                          },
                                          "value": "Conflict: Key already has purpose"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_stringliteral_ced1bafc369b7e2b0ca5f6ed9c6c1eb753593d516580b4f3f74fc55e230be91e",
                                            "typeString": "literal_string \"Conflict: Key already has purpose\""
                                          }
                                        ],
                                        "id": 526,
                                        "name": "revert",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [
                                          4294967277,
                                          4294967277
                                        ],
                                        "referencedDeclaration": 4294967277,
                                        "src": "5832:6:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                          "typeString": "function (string memory) pure"
                                        }
                                      },
                                      "id": 528,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "5832:43:1",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 529,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5832:43:1"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 510,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 504,
                            "name": "keyPurposeIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 501,
                            "src": "5629:15:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "expression": {
                              "expression": {
                                "baseExpression": {
                                  "id": 505,
                                  "name": "keys",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1755,
                                  "src": "5647:4:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Key_$1786_storage_$",
                                    "typeString": "mapping(bytes32 => struct Structs.Key storage ref)"
                                  }
                                },
                                "id": 507,
                                "indexExpression": {
                                  "id": 506,
                                  "name": "_key",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 459,
                                  "src": "5652:4:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "5647:10:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Key_$1786_storage",
                                  "typeString": "struct Structs.Key storage ref"
                                }
                              },
                              "id": 508,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "5658:8:1",
                              "memberName": "purposes",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1781,
                              "src": "5647:19:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                                "typeString": "uint256[] storage ref"
                              }
                            },
                            "id": 509,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "5667:6:1",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "5647:26:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5629:44:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 533,
                        "initializationExpression": {
                          "assignments": [
                            501
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 501,
                              "mutability": "mutable",
                              "name": "keyPurposeIndex",
                              "nameLocation": "5608:15:1",
                              "nodeType": "VariableDeclaration",
                              "scope": 533,
                              "src": "5603:20:1",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 500,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "5603:4:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 503,
                          "initialValue": {
                            "hexValue": "30",
                            "id": 502,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5626:1:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "5603:24:1"
                        },
                        "loopExpression": {
                          "expression": {
                            "id": 512,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "5675:17:1",
                            "subExpression": {
                              "id": 511,
                              "name": "keyPurposeIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 501,
                              "src": "5675:15:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 513,
                          "nodeType": "ExpressionStatement",
                          "src": "5675:17:1"
                        },
                        "nodeType": "ForStatement",
                        "src": "5598:310:1"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 539,
                              "name": "_purpose",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 461,
                              "src": "5947:8:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "expression": {
                                "baseExpression": {
                                  "id": 534,
                                  "name": "keys",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1755,
                                  "src": "5922:4:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Key_$1786_storage_$",
                                    "typeString": "mapping(bytes32 => struct Structs.Key storage ref)"
                                  }
                                },
                                "id": 536,
                                "indexExpression": {
                                  "id": 535,
                                  "name": "_key",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 459,
                                  "src": "5927:4:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "5922:10:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Key_$1786_storage",
                                  "typeString": "struct Structs.Key storage ref"
                                }
                              },
                              "id": 537,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "5933:8:1",
                              "memberName": "purposes",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1781,
                              "src": "5922:19:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                                "typeString": "uint256[] storage ref"
                              }
                            },
                            "id": 538,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "5942:4:1",
                            "memberName": "push",
                            "nodeType": "MemberAccess",
                            "src": "5922:24:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_arraypush_nonpayable$_t_array$_t_uint256_$dyn_storage_ptr_$_t_uint256_$returns$__$bound_to$_t_array$_t_uint256_$dyn_storage_ptr_$",
                              "typeString": "function (uint256[] storage pointer,uint256)"
                            }
                          },
                          "id": 540,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5922:34:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 541,
                        "nodeType": "ExpressionStatement",
                        "src": "5922:34:1"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 571,
                        "name": "_key",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 459,
                        "src": "6144:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "baseExpression": {
                          "id": 567,
                          "name": "keysByPurpose",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1760,
                          "src": "6115:13:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_array$_t_bytes32_$dyn_storage_$",
                            "typeString": "mapping(uint256 => bytes32[] storage ref)"
                          }
                        },
                        "id": 569,
                        "indexExpression": {
                          "id": 568,
                          "name": "_purpose",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 461,
                          "src": "6129:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "6115:23:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                          "typeString": "bytes32[] storage ref"
                        }
                      },
                      "id": 570,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "6139:4:1",
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "src": "6115:28:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_array$_t_bytes32_$dyn_storage_ptr_$_t_bytes32_$returns$__$bound_to$_t_array$_t_bytes32_$dyn_storage_ptr_$",
                        "typeString": "function (bytes32[] storage pointer,bytes32)"
                      }
                    },
                    "id": 572,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6115:34:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 573,
                  "nodeType": "ExpressionStatement",
                  "src": "6115:34:1"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 575,
                        "name": "_key",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 459,
                        "src": "6174:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 576,
                        "name": "_purpose",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 461,
                        "src": "6180:8:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 577,
                        "name": "_type",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 463,
                        "src": "6190:5:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 574,
                      "name": "KeyAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1507,
                      "src": "6165:8:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes32,uint256,uint256)"
                      }
                    },
                    "id": 578,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6165:31:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 579,
                  "nodeType": "EmitStatement",
                  "src": "6160:36:1"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 580,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "6214:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 470,
                  "id": 581,
                  "nodeType": "Return",
                  "src": "6207:11:1"
                }
              ]
            },
            "documentation": {
              "id": 457,
              "nodeType": "StructuredDocumentation",
              "src": "4150:1075:1",
              "text": " @notice implementation of the addKey function of the ERC-734 standard\n Adds a _key to the identity. The _purpose specifies the purpose of key. Initially we propose four purposes:\n 1: MANAGEMENT keys, which can manage the identity\n 2: ACTION keys, which perform actions in this identities name (signing, logins, transactions, etc.)\n 3: CLAIM signer keys, used to sign claims on other identities which need to be revokable.\n 4: ENCRYPTION keys, used to encrypt data e.g. hold in claims.\n MUST only be done by keys of purpose 1, or the identity itself.\n If its the identity itself, the approval process will determine its approval.\n @param _key keccak256 representation of an ethereum address\n @param _type type of key used, which would be a uint256 for different key types. e.g. 1 = ECDSA, 2 = RSA, etc.\n @param _purpose a uint256[] Array of the key types, like 1 = MANAGEMENT, 2 = ACTION, 3 = CLAIM, 4 = ENCRYPTION\n @return success Returns TRUE if the addition was successful and FALSE if not"
            },
            "functionSelector": "1d381240",
            "id": 583,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 466,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 465,
                  "name": "delegatedOnly",
                  "nameLocations": [
                    "5308:13:1"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 294,
                  "src": "5308:13:1"
                },
                "nodeType": "ModifierInvocation",
                "src": "5308:13:1"
              }
            ],
            "name": "addKey",
            "nameLocation": "5239:6:1",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 467,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5326:8:1"
            },
            "parameters": {
              "id": 464,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 459,
                  "mutability": "mutable",
                  "name": "_key",
                  "nameLocation": "5254:4:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 583,
                  "src": "5246:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 458,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5246:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 461,
                  "mutability": "mutable",
                  "name": "_purpose",
                  "nameLocation": "5268:8:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 583,
                  "src": "5260:16:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 460,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5260:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 463,
                  "mutability": "mutable",
                  "name": "_type",
                  "nameLocation": "5286:5:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 583,
                  "src": "5278:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 462,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5278:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5245:47:1"
            },
            "returnParameters": {
              "id": 470,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 469,
                  "mutability": "mutable",
                  "name": "success",
                  "nameLocation": "5353:7:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 583,
                  "src": "5348:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 468,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5348:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5347:14:1"
            },
            "scope": 1411,
            "src": "5230:995:1",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              1545
            ],
            "body": {
              "id": 708,
              "nodeType": "Block",
              "src": "6731:1021:1",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "expression": {
                                      "id": 601,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4294967281,
                                      "src": "6784:3:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 602,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "6788:6:1",
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "src": "6784:10:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "id": 599,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4294967295,
                                    "src": "6773:3:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 600,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberLocation": "6777:6:1",
                                  "memberName": "encode",
                                  "nodeType": "MemberAccess",
                                  "src": "6773:10:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 603,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6773:22:1",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 598,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967288,
                              "src": "6763:9:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 604,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6763:33:1",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "hexValue": "32",
                            "id": 605,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6798:1:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            }
                          ],
                          "id": 597,
                          "name": "keyHasPurpose",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1036,
                          "src": "6749:13:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (bytes32,uint256) view returns (bool)"
                          }
                        },
                        "id": 606,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6749:51:1",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "53656e64657220646f6573206e6f74206861766520616374696f6e206b6579",
                        "id": 607,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6802:33:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2239811702909a77ce5c35bc6905c72e29655cd69df6a5b32bf74fddbc156a6c",
                          "typeString": "literal_string \"Sender does not have action key\""
                        },
                        "value": "Sender does not have action key"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2239811702909a77ce5c35bc6905c72e29655cd69df6a5b32bf74fddbc156a6c",
                          "typeString": "literal_string \"Sender does not have action key\""
                        }
                      ],
                      "id": 596,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "6741:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 608,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6741:95:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 609,
                  "nodeType": "ExpressionStatement",
                  "src": "6741:95:1"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 611,
                        "name": "_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 586,
                        "src": "6861:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 612,
                        "name": "_approve",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 588,
                        "src": "6866:8:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 610,
                      "name": "Approved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1466,
                      "src": "6852:8:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_bool_$returns$__$",
                        "typeString": "function (uint256,bool)"
                      }
                    },
                    "id": 613,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6852:23:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 614,
                  "nodeType": "EmitStatement",
                  "src": "6847:28:1"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 617,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 615,
                      "name": "_approve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 588,
                      "src": "6890:8:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "74727565",
                      "id": 616,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6902:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "6890:16:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 704,
                    "nodeType": "Block",
                    "src": "7668:57:1",
                    "statements": [
                      {
                        "expression": {
                          "id": 702,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 697,
                                "name": "executions",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1765,
                                "src": "7682:10:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Execution_$1797_storage_$",
                                  "typeString": "mapping(uint256 => struct Structs.Execution storage ref)"
                                }
                              },
                              "id": 699,
                              "indexExpression": {
                                "id": 698,
                                "name": "_id",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 586,
                                "src": "7693:3:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "7682:15:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Execution_$1797_storage",
                                "typeString": "struct Structs.Execution storage ref"
                              }
                            },
                            "id": 700,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "7698:8:1",
                            "memberName": "approved",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1794,
                            "src": "7682:24:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "66616c7365",
                            "id": 701,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7709:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          },
                          "src": "7682:32:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 703,
                        "nodeType": "ExpressionStatement",
                        "src": "7682:32:1"
                      }
                    ]
                  },
                  "id": 705,
                  "nodeType": "IfStatement",
                  "src": "6886:839:1",
                  "trueBody": {
                    "id": 696,
                    "nodeType": "Block",
                    "src": "6908:754:1",
                    "statements": [
                      {
                        "expression": {
                          "id": 623,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 618,
                                "name": "executions",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1765,
                                "src": "6922:10:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Execution_$1797_storage_$",
                                  "typeString": "mapping(uint256 => struct Structs.Execution storage ref)"
                                }
                              },
                              "id": 620,
                              "indexExpression": {
                                "id": 619,
                                "name": "_id",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 586,
                                "src": "6933:3:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6922:15:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Execution_$1797_storage",
                                "typeString": "struct Structs.Execution storage ref"
                              }
                            },
                            "id": 621,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "6938:8:1",
                            "memberName": "approved",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1794,
                            "src": "6922:24:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "74727565",
                            "id": 622,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6949:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "6922:31:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 624,
                        "nodeType": "ExpressionStatement",
                        "src": "6922:31:1"
                      },
                      {
                        "expression": {
                          "id": 647,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "components": [
                              {
                                "id": 625,
                                "name": "success",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 594,
                                "src": "6969:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              null
                            ],
                            "id": 626,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "6968:10:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_bool_$__$",
                              "typeString": "tuple(bool,)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "expression": {
                                      "baseExpression": {
                                        "id": 640,
                                        "name": "executions",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1765,
                                        "src": "7047:10:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Execution_$1797_storage_$",
                                          "typeString": "mapping(uint256 => struct Structs.Execution storage ref)"
                                        }
                                      },
                                      "id": 642,
                                      "indexExpression": {
                                        "id": 641,
                                        "name": "_id",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 586,
                                        "src": "7058:3:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "7047:15:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Execution_$1797_storage",
                                        "typeString": "struct Structs.Execution storage ref"
                                      }
                                    },
                                    "id": 643,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "7063:4:1",
                                    "memberName": "data",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 1792,
                                    "src": "7047:20:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_storage",
                                      "typeString": "bytes storage ref"
                                    }
                                  },
                                  {
                                    "hexValue": "30",
                                    "id": 644,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "7069:1:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_storage",
                                      "typeString": "bytes storage ref"
                                    },
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "expression": {
                                    "id": 638,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4294967295,
                                    "src": "7036:3:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 639,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberLocation": "7040:6:1",
                                  "memberName": "encode",
                                  "nodeType": "MemberAccess",
                                  "src": "7036:10:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 645,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7036:35:1",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "expression": {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 627,
                                      "name": "executions",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1765,
                                      "src": "6981:10:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Execution_$1797_storage_$",
                                        "typeString": "mapping(uint256 => struct Structs.Execution storage ref)"
                                      }
                                    },
                                    "id": 629,
                                    "indexExpression": {
                                      "id": 628,
                                      "name": "_id",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 586,
                                      "src": "6992:3:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "6981:15:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Execution_$1797_storage",
                                      "typeString": "struct Structs.Execution storage ref"
                                    }
                                  },
                                  "id": 630,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "6997:2:1",
                                  "memberName": "to",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1788,
                                  "src": "6981:18:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "id": 631,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "7000:4:1",
                                "memberName": "call",
                                "nodeType": "MemberAccess",
                                "src": "6981:23:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                }
                              },
                              "id": 637,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "names": [
                                "value"
                              ],
                              "nodeType": "FunctionCallOptions",
                              "options": [
                                {
                                  "components": [
                                    {
                                      "expression": {
                                        "baseExpression": {
                                          "id": 632,
                                          "name": "executions",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1765,
                                          "src": "7012:10:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Execution_$1797_storage_$",
                                            "typeString": "mapping(uint256 => struct Structs.Execution storage ref)"
                                          }
                                        },
                                        "id": 634,
                                        "indexExpression": {
                                          "id": 633,
                                          "name": "_id",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 586,
                                          "src": "7023:3:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "7012:15:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Execution_$1797_storage",
                                          "typeString": "struct Structs.Execution storage ref"
                                        }
                                      },
                                      "id": 635,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "7028:5:1",
                                      "memberName": "value",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 1790,
                                      "src": "7012:21:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 636,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "7011:23:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "src": "6981:54:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                                "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                              }
                            },
                            "id": 646,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6981:91:1",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "tuple(bool,bytes memory)"
                            }
                          },
                          "src": "6968:104:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 648,
                        "nodeType": "ExpressionStatement",
                        "src": "6968:104:1"
                      },
                      {
                        "condition": {
                          "id": 649,
                          "name": "success",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 594,
                          "src": "7091:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 694,
                          "nodeType": "Block",
                          "src": "7400:252:1",
                          "statements": [
                            {
                              "eventCall": {
                                "arguments": [
                                  {
                                    "id": 677,
                                    "name": "_id",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 586,
                                    "src": "7460:3:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "baseExpression": {
                                        "id": 678,
                                        "name": "executions",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1765,
                                        "src": "7485:10:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Execution_$1797_storage_$",
                                          "typeString": "mapping(uint256 => struct Structs.Execution storage ref)"
                                        }
                                      },
                                      "id": 680,
                                      "indexExpression": {
                                        "id": 679,
                                        "name": "_id",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 586,
                                        "src": "7496:3:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "7485:15:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Execution_$1797_storage",
                                        "typeString": "struct Structs.Execution storage ref"
                                      }
                                    },
                                    "id": 681,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "7501:2:1",
                                    "memberName": "to",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 1788,
                                    "src": "7485:18:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "baseExpression": {
                                        "id": 682,
                                        "name": "executions",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1765,
                                        "src": "7525:10:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Execution_$1797_storage_$",
                                          "typeString": "mapping(uint256 => struct Structs.Execution storage ref)"
                                        }
                                      },
                                      "id": 684,
                                      "indexExpression": {
                                        "id": 683,
                                        "name": "_id",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 586,
                                        "src": "7536:3:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "7525:15:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Execution_$1797_storage",
                                        "typeString": "struct Structs.Execution storage ref"
                                      }
                                    },
                                    "id": 685,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "7541:5:1",
                                    "memberName": "value",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 1790,
                                    "src": "7525:21:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "baseExpression": {
                                        "id": 686,
                                        "name": "executions",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1765,
                                        "src": "7568:10:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Execution_$1797_storage_$",
                                          "typeString": "mapping(uint256 => struct Structs.Execution storage ref)"
                                        }
                                      },
                                      "id": 688,
                                      "indexExpression": {
                                        "id": 687,
                                        "name": "_id",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 586,
                                        "src": "7579:3:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "7568:15:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Execution_$1797_storage",
                                        "typeString": "struct Structs.Execution storage ref"
                                      }
                                    },
                                    "id": 689,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "7584:4:1",
                                    "memberName": "data",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 1792,
                                    "src": "7568:20:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_storage",
                                      "typeString": "bytes storage ref"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_storage",
                                      "typeString": "bytes storage ref"
                                    }
                                  ],
                                  "id": 676,
                                  "name": "ExecutionFailed",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1498,
                                  "src": "7423:15:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                                    "typeString": "function (uint256,address,uint256,bytes memory)"
                                  }
                                },
                                "id": 690,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7423:183:1",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 691,
                              "nodeType": "EmitStatement",
                              "src": "7418:188:1"
                            },
                            {
                              "expression": {
                                "hexValue": "66616c7365",
                                "id": 692,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7632:5:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              "functionReturnParameters": 595,
                              "id": 693,
                              "nodeType": "Return",
                              "src": "7625:12:1"
                            }
                          ]
                        },
                        "id": 695,
                        "nodeType": "IfStatement",
                        "src": "7087:565:1",
                        "trueBody": {
                          "id": 675,
                          "nodeType": "Block",
                          "src": "7100:294:1",
                          "statements": [
                            {
                              "expression": {
                                "id": 655,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 650,
                                      "name": "executions",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1765,
                                      "src": "7118:10:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Execution_$1797_storage_$",
                                        "typeString": "mapping(uint256 => struct Structs.Execution storage ref)"
                                      }
                                    },
                                    "id": 652,
                                    "indexExpression": {
                                      "id": 651,
                                      "name": "_id",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 586,
                                      "src": "7129:3:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "7118:15:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Execution_$1797_storage",
                                      "typeString": "struct Structs.Execution storage ref"
                                    }
                                  },
                                  "id": 653,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberLocation": "7134:8:1",
                                  "memberName": "executed",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1796,
                                  "src": "7118:24:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "hexValue": "74727565",
                                  "id": 654,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7145:4:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "true"
                                },
                                "src": "7118:31:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 656,
                              "nodeType": "ExpressionStatement",
                              "src": "7118:31:1"
                            },
                            {
                              "eventCall": {
                                "arguments": [
                                  {
                                    "id": 658,
                                    "name": "_id",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 586,
                                    "src": "7203:3:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "baseExpression": {
                                        "id": 659,
                                        "name": "executions",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1765,
                                        "src": "7228:10:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Execution_$1797_storage_$",
                                          "typeString": "mapping(uint256 => struct Structs.Execution storage ref)"
                                        }
                                      },
                                      "id": 661,
                                      "indexExpression": {
                                        "id": 660,
                                        "name": "_id",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 586,
                                        "src": "7239:3:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "7228:15:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Execution_$1797_storage",
                                        "typeString": "struct Structs.Execution storage ref"
                                      }
                                    },
                                    "id": 662,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "7244:2:1",
                                    "memberName": "to",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 1788,
                                    "src": "7228:18:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "baseExpression": {
                                        "id": 663,
                                        "name": "executions",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1765,
                                        "src": "7268:10:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Execution_$1797_storage_$",
                                          "typeString": "mapping(uint256 => struct Structs.Execution storage ref)"
                                        }
                                      },
                                      "id": 665,
                                      "indexExpression": {
                                        "id": 664,
                                        "name": "_id",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 586,
                                        "src": "7279:3:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "7268:15:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Execution_$1797_storage",
                                        "typeString": "struct Structs.Execution storage ref"
                                      }
                                    },
                                    "id": 666,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "7284:5:1",
                                    "memberName": "value",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 1790,
                                    "src": "7268:21:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "baseExpression": {
                                        "id": 667,
                                        "name": "executions",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1765,
                                        "src": "7311:10:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Execution_$1797_storage_$",
                                          "typeString": "mapping(uint256 => struct Structs.Execution storage ref)"
                                        }
                                      },
                                      "id": 669,
                                      "indexExpression": {
                                        "id": 668,
                                        "name": "_id",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 586,
                                        "src": "7322:3:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "7311:15:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Execution_$1797_storage",
                                        "typeString": "struct Structs.Execution storage ref"
                                      }
                                    },
                                    "id": 670,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "7327:4:1",
                                    "memberName": "data",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 1792,
                                    "src": "7311:20:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_storage",
                                      "typeString": "bytes storage ref"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_storage",
                                      "typeString": "bytes storage ref"
                                    }
                                  ],
                                  "id": 657,
                                  "name": "Executed",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1477,
                                  "src": "7173:8:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                                    "typeString": "function (uint256,address,uint256,bytes memory)"
                                  }
                                },
                                "id": 671,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7173:176:1",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 672,
                              "nodeType": "EmitStatement",
                              "src": "7168:181:1"
                            },
                            {
                              "expression": {
                                "hexValue": "74727565",
                                "id": 673,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7375:4:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "true"
                              },
                              "functionReturnParameters": 595,
                              "id": 674,
                              "nodeType": "Return",
                              "src": "7368:11:1"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 706,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "7741:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 595,
                  "id": 707,
                  "nodeType": "Return",
                  "src": "7734:11:1"
                }
              ]
            },
            "documentation": {
              "id": 584,
              "nodeType": "StructuredDocumentation",
              "src": "6231:377:1",
              "text": " @notice Approves an execution or claim addition.\n This SHOULD require n of m approvals of keys purpose 1, if the _to of the execution is the identity contract itself, to successfully approve an execution.\n And COULD require n of m approvals of keys purpose 2, if the _to of the execution is another contract, to successfully approve an execution."
            },
            "functionSelector": "747442d3",
            "id": 709,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 591,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 590,
                  "name": "delegatedOnly",
                  "nameLocations": [
                    "6673:13:1"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 294,
                  "src": "6673:13:1"
                },
                "nodeType": "ModifierInvocation",
                "src": "6673:13:1"
              }
            ],
            "name": "approve",
            "nameLocation": "6622:7:1",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 592,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6691:8:1"
            },
            "parameters": {
              "id": 589,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 586,
                  "mutability": "mutable",
                  "name": "_id",
                  "nameLocation": "6638:3:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 709,
                  "src": "6630:11:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 585,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6630:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 588,
                  "mutability": "mutable",
                  "name": "_approve",
                  "nameLocation": "6648:8:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 709,
                  "src": "6643:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 587,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6643:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6629:28:1"
            },
            "returnParameters": {
              "id": 595,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 594,
                  "mutability": "mutable",
                  "name": "success",
                  "nameLocation": "6718:7:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 709,
                  "src": "6713:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 593,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6713:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6712:14:1"
            },
            "scope": 1411,
            "src": "6613:1139:1",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              1557
            ],
            "body": {
              "id": 785,
              "nodeType": "Block",
              "src": "8323:478:1",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 729,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "8341:36:1",
                        "subExpression": {
                          "expression": {
                            "baseExpression": {
                              "id": 725,
                              "name": "executions",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1765,
                              "src": "8342:10:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Execution_$1797_storage_$",
                                "typeString": "mapping(uint256 => struct Structs.Execution storage ref)"
                              }
                            },
                            "id": 727,
                            "indexExpression": {
                              "id": 726,
                              "name": "executionNonce",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1750,
                              "src": "8353:14:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "8342:26:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Execution_$1797_storage",
                              "typeString": "struct Structs.Execution storage ref"
                            }
                          },
                          "id": 728,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "8369:8:1",
                          "memberName": "executed",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1796,
                          "src": "8342:35:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "416c7265616479206578656375746564",
                        "id": 730,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8379:18:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_58f47ea4e737df2d9cc4764db26c111751884cf0a1856aca9f4c66cadc811e1b",
                          "typeString": "literal_string \"Already executed\""
                        },
                        "value": "Already executed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_58f47ea4e737df2d9cc4764db26c111751884cf0a1856aca9f4c66cadc811e1b",
                          "typeString": "literal_string \"Already executed\""
                        }
                      ],
                      "id": 724,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "8333:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 731,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8333:65:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 732,
                  "nodeType": "ExpressionStatement",
                  "src": "8333:65:1"
                },
                {
                  "expression": {
                    "id": 738,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 733,
                          "name": "executions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1765,
                          "src": "8408:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Execution_$1797_storage_$",
                            "typeString": "mapping(uint256 => struct Structs.Execution storage ref)"
                          }
                        },
                        "id": 735,
                        "indexExpression": {
                          "id": 734,
                          "name": "executionNonce",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1750,
                          "src": "8419:14:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "8408:26:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Execution_$1797_storage",
                          "typeString": "struct Structs.Execution storage ref"
                        }
                      },
                      "id": 736,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "8435:2:1",
                      "memberName": "to",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1788,
                      "src": "8408:29:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 737,
                      "name": "_to",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 712,
                      "src": "8440:3:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "8408:35:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 739,
                  "nodeType": "ExpressionStatement",
                  "src": "8408:35:1"
                },
                {
                  "expression": {
                    "id": 745,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 740,
                          "name": "executions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1765,
                          "src": "8453:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Execution_$1797_storage_$",
                            "typeString": "mapping(uint256 => struct Structs.Execution storage ref)"
                          }
                        },
                        "id": 742,
                        "indexExpression": {
                          "id": 741,
                          "name": "executionNonce",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1750,
                          "src": "8464:14:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "8453:26:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Execution_$1797_storage",
                          "typeString": "struct Structs.Execution storage ref"
                        }
                      },
                      "id": 743,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "8480:5:1",
                      "memberName": "value",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1790,
                      "src": "8453:32:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 744,
                      "name": "_value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 714,
                      "src": "8488:6:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8453:41:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 746,
                  "nodeType": "ExpressionStatement",
                  "src": "8453:41:1"
                },
                {
                  "expression": {
                    "id": 752,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 747,
                          "name": "executions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1765,
                          "src": "8504:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Execution_$1797_storage_$",
                            "typeString": "mapping(uint256 => struct Structs.Execution storage ref)"
                          }
                        },
                        "id": 749,
                        "indexExpression": {
                          "id": 748,
                          "name": "executionNonce",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1750,
                          "src": "8515:14:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "8504:26:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Execution_$1797_storage",
                          "typeString": "struct Structs.Execution storage ref"
                        }
                      },
                      "id": 750,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "8531:4:1",
                      "memberName": "data",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1792,
                      "src": "8504:31:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage",
                        "typeString": "bytes storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 751,
                      "name": "_data",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 716,
                      "src": "8538:5:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "8504:39:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage",
                      "typeString": "bytes storage ref"
                    }
                  },
                  "id": 753,
                  "nodeType": "ExpressionStatement",
                  "src": "8504:39:1"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 755,
                        "name": "executionNonce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1750,
                        "src": "8578:14:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 756,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 712,
                        "src": "8594:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 757,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 714,
                        "src": "8599:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 758,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 716,
                        "src": "8607:5:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 754,
                      "name": "ExecutionRequested",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1488,
                      "src": "8559:18:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (uint256,address,uint256,bytes memory)"
                      }
                    },
                    "id": 759,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8559:54:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 760,
                  "nodeType": "EmitStatement",
                  "src": "8554:59:1"
                },
                {
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 765,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967281,
                                  "src": "8663:3:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 766,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "8667:6:1",
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "8663:10:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "id": 763,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967295,
                                "src": "8652:3:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 764,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberLocation": "8656:6:1",
                              "memberName": "encode",
                              "nodeType": "MemberAccess",
                              "src": "8652:10:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 767,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8652:22:1",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 762,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967288,
                          "src": "8642:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                            "typeString": "function (bytes memory) pure returns (bytes32)"
                          }
                        },
                        "id": 768,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8642:33:1",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "hexValue": "32",
                        "id": 769,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8677:1:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        }
                      ],
                      "id": 761,
                      "name": "keyHasPurpose",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1036,
                      "src": "8628:13:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (bytes32,uint256) view returns (bool)"
                      }
                    },
                    "id": 770,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8628:51:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 777,
                  "nodeType": "IfStatement",
                  "src": "8624:111:1",
                  "trueBody": {
                    "id": 776,
                    "nodeType": "Block",
                    "src": "8681:54:1",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 772,
                              "name": "executionNonce",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1750,
                              "src": "8703:14:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "74727565",
                              "id": 773,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8719:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 771,
                            "name": "approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 709,
                            "src": "8695:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_bool_$returns$_t_bool_$",
                              "typeString": "function (uint256,bool) returns (bool)"
                            }
                          },
                          "id": 774,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8695:29:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 775,
                        "nodeType": "ExpressionStatement",
                        "src": "8695:29:1"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 779,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "++",
                    "prefix": false,
                    "src": "8745:16:1",
                    "subExpression": {
                      "id": 778,
                      "name": "executionNonce",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1750,
                      "src": "8745:14:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 780,
                  "nodeType": "ExpressionStatement",
                  "src": "8745:16:1"
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 783,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 781,
                      "name": "executionNonce",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1750,
                      "src": "8778:14:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "hexValue": "31",
                      "id": 782,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8793:1:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "8778:16:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 723,
                  "id": 784,
                  "nodeType": "Return",
                  "src": "8771:23:1"
                }
              ]
            },
            "documentation": {
              "id": 710,
              "nodeType": "StructuredDocumentation",
              "src": "7758:402:1",
              "text": " @notice Passes an execution instruction to the keymanager.\n SHOULD require approve to be called with one or more keys of purpose 1 or 2 to approve this execution.\n Execute COULD be used as the only accessor for addKey, removeKey and replaceKey and removeClaim.\n @return executionId SHOULD be sent to the approve function, to approve or reject this execution."
            },
            "functionSelector": "b61d27f6",
            "id": 786,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 719,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 718,
                  "name": "delegatedOnly",
                  "nameLocations": [
                    "8246:13:1"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 294,
                  "src": "8246:13:1"
                },
                "nodeType": "ModifierInvocation",
                "src": "8246:13:1"
              }
            ],
            "name": "execute",
            "nameLocation": "8174:7:1",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 720,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8264:8:1"
            },
            "parameters": {
              "id": 717,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 712,
                  "mutability": "mutable",
                  "name": "_to",
                  "nameLocation": "8190:3:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 786,
                  "src": "8182:11:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 711,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8182:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 714,
                  "mutability": "mutable",
                  "name": "_value",
                  "nameLocation": "8203:6:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 786,
                  "src": "8195:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 713,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8195:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 716,
                  "mutability": "mutable",
                  "name": "_data",
                  "nameLocation": "8224:5:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 786,
                  "src": "8211:18:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 715,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "8211:5:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8181:49:1"
            },
            "returnParameters": {
              "id": 723,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 722,
                  "mutability": "mutable",
                  "name": "executionId",
                  "nameLocation": "8306:11:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 786,
                  "src": "8298:19:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 721,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8298:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8297:21:1"
            },
            "scope": 1411,
            "src": "8165:636:1",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              1608
            ],
            "body": {
              "id": 976,
              "nodeType": "Block",
              "src": "8991:1338:1",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 805,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "baseExpression": {
                              "id": 800,
                              "name": "keys",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1755,
                              "src": "9009:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Key_$1786_storage_$",
                                "typeString": "mapping(bytes32 => struct Structs.Key storage ref)"
                              }
                            },
                            "id": 802,
                            "indexExpression": {
                              "id": 801,
                              "name": "_key",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 789,
                              "src": "9014:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9009:10:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Key_$1786_storage",
                              "typeString": "struct Structs.Key storage ref"
                            }
                          },
                          "id": 803,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "9020:3:1",
                          "memberName": "key",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1785,
                          "src": "9009:14:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 804,
                          "name": "_key",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 789,
                          "src": "9027:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "9009:22:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4e6f6e4578697374696e673a204b65792069736e27742072656769737465726564",
                        "id": 806,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9033:35:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ecf72bc49d7f73c31e2e6c0aa61a9da361706713b0b2d9f242245b62877b78d2",
                          "typeString": "literal_string \"NonExisting: Key isn't registered\""
                        },
                        "value": "NonExisting: Key isn't registered"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ecf72bc49d7f73c31e2e6c0aa61a9da361706713b0b2d9f242245b62877b78d2",
                          "typeString": "literal_string \"NonExisting: Key isn't registered\""
                        }
                      ],
                      "id": 799,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "9001:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 807,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9001:68:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 808,
                  "nodeType": "ExpressionStatement",
                  "src": "9001:68:1"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 815,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 809,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967281,
                        "src": "9084:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 810,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "9088:6:1",
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "9084:10:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "id": 813,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967268,
                          "src": "9106:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Identity_$1411",
                            "typeString": "contract Identity"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_Identity_$1411",
                            "typeString": "contract Identity"
                          }
                        ],
                        "id": 812,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "9098:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 811,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "9098:7:1",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 814,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9098:13:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "9084:27:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 831,
                  "nodeType": "IfStatement",
                  "src": "9080:199:1",
                  "trueBody": {
                    "id": 830,
                    "nodeType": "Block",
                    "src": "9113:166:1",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "expression": {
                                            "id": 821,
                                            "name": "msg",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4294967281,
                                            "src": "9170:3:1",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_magic_message",
                                              "typeString": "msg"
                                            }
                                          },
                                          "id": 822,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberLocation": "9174:6:1",
                                          "memberName": "sender",
                                          "nodeType": "MemberAccess",
                                          "src": "9170:10:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "expression": {
                                          "id": 819,
                                          "name": "abi",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4294967295,
                                          "src": "9159:3:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_abi",
                                            "typeString": "abi"
                                          }
                                        },
                                        "id": 820,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "memberLocation": "9163:6:1",
                                        "memberName": "encode",
                                        "nodeType": "MemberAccess",
                                        "src": "9159:10:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                          "typeString": "function () pure returns (bytes memory)"
                                        }
                                      },
                                      "id": 823,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "9159:22:1",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    ],
                                    "id": 818,
                                    "name": "keccak256",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4294967288,
                                    "src": "9149:9:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                      "typeString": "function (bytes memory) pure returns (bytes32)"
                                    }
                                  },
                                  "id": 824,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "9149:33:1",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "hexValue": "31",
                                  "id": 825,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "9184:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  }
                                ],
                                "id": 817,
                                "name": "keyHasPurpose",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1036,
                                "src": "9135:13:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (bytes32,uint256) view returns (bool)"
                                }
                              },
                              "id": 826,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9135:51:1",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "5065726d697373696f6e733a2053656e64657220646f6573206e6f742068617665206d616e6167656d656e74206b6579",
                              "id": 827,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9188:50:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_6f6b3247450dc94fc6574303b07d6b95320782b0ece8a8d742601c64b874e995",
                                "typeString": "literal_string \"Permissions: Sender does not have management key\""
                              },
                              "value": "Permissions: Sender does not have management key"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_6f6b3247450dc94fc6574303b07d6b95320782b0ece8a8d742601c64b874e995",
                                "typeString": "literal_string \"Permissions: Sender does not have management key\""
                              }
                            ],
                            "id": 816,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967278,
                              4294967278
                            ],
                            "referencedDeclaration": 4294967278,
                            "src": "9127:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 828,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9127:112:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 829,
                        "nodeType": "ExpressionStatement",
                        "src": "9127:112:1"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 839,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "expression": {
                              "baseExpression": {
                                "id": 833,
                                "name": "keys",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1755,
                                "src": "9297:4:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Key_$1786_storage_$",
                                  "typeString": "mapping(bytes32 => struct Structs.Key storage ref)"
                                }
                              },
                              "id": 835,
                              "indexExpression": {
                                "id": 834,
                                "name": "_key",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 789,
                                "src": "9302:4:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "9297:10:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Key_$1786_storage",
                                "typeString": "struct Structs.Key storage ref"
                              }
                            },
                            "id": 836,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "9308:8:1",
                            "memberName": "purposes",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1781,
                            "src": "9297:19:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                              "typeString": "uint256[] storage ref"
                            }
                          },
                          "id": 837,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "9317:6:1",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "9297:26:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 838,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9326:1:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "9297:30:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4e6f6e4578697374696e673a204b657920646f65736e27742068617665207375636820707572706f7365",
                        "id": 840,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9329:44:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c5c6d7bd64c120db0a0dc884afccd0850100d55ba7968801315e930cfbbcdba6",
                          "typeString": "literal_string \"NonExisting: Key doesn't have such purpose\""
                        },
                        "value": "NonExisting: Key doesn't have such purpose"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c5c6d7bd64c120db0a0dc884afccd0850100d55ba7968801315e930cfbbcdba6",
                          "typeString": "literal_string \"NonExisting: Key doesn't have such purpose\""
                        }
                      ],
                      "id": 832,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "9289:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 841,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9289:85:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 842,
                  "nodeType": "ExpressionStatement",
                  "src": "9289:85:1"
                },
                {
                  "assignments": [
                    844
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 844,
                      "mutability": "mutable",
                      "name": "purposeIndex",
                      "nameLocation": "9390:12:1",
                      "nodeType": "VariableDeclaration",
                      "scope": 976,
                      "src": "9385:17:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 843,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "9385:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 846,
                  "initialValue": {
                    "hexValue": "30",
                    "id": 845,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "9405:1:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9385:21:1"
                },
                {
                  "body": {
                    "id": 868,
                    "nodeType": "Block",
                    "src": "9470:139:1",
                    "statements": [
                      {
                        "expression": {
                          "id": 856,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "9484:14:1",
                          "subExpression": {
                            "id": 855,
                            "name": "purposeIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 844,
                            "src": "9484:12:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 857,
                        "nodeType": "ExpressionStatement",
                        "src": "9484:14:1"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 864,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 858,
                            "name": "purposeIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 844,
                            "src": "9517:12:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "expression": {
                              "expression": {
                                "baseExpression": {
                                  "id": 859,
                                  "name": "keys",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1755,
                                  "src": "9533:4:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Key_$1786_storage_$",
                                    "typeString": "mapping(bytes32 => struct Structs.Key storage ref)"
                                  }
                                },
                                "id": 861,
                                "indexExpression": {
                                  "id": 860,
                                  "name": "_key",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 789,
                                  "src": "9538:4:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "9533:10:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Key_$1786_storage",
                                  "typeString": "struct Structs.Key storage ref"
                                }
                              },
                              "id": 862,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "9544:8:1",
                              "memberName": "purposes",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1781,
                              "src": "9533:19:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                                "typeString": "uint256[] storage ref"
                              }
                            },
                            "id": 863,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "9553:6:1",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "9533:26:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9517:42:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 867,
                        "nodeType": "IfStatement",
                        "src": "9513:86:1",
                        "trueBody": {
                          "id": 866,
                          "nodeType": "Block",
                          "src": "9561:38:1",
                          "statements": [
                            {
                              "id": 865,
                              "nodeType": "Break",
                              "src": "9579:5:1"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 854,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "baseExpression": {
                        "expression": {
                          "baseExpression": {
                            "id": 847,
                            "name": "keys",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1755,
                            "src": "9423:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Key_$1786_storage_$",
                              "typeString": "mapping(bytes32 => struct Structs.Key storage ref)"
                            }
                          },
                          "id": 849,
                          "indexExpression": {
                            "id": 848,
                            "name": "_key",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 789,
                            "src": "9428:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9423:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Key_$1786_storage",
                            "typeString": "struct Structs.Key storage ref"
                          }
                        },
                        "id": 850,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "9434:8:1",
                        "memberName": "purposes",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1781,
                        "src": "9423:19:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                          "typeString": "uint256[] storage ref"
                        }
                      },
                      "id": 852,
                      "indexExpression": {
                        "id": 851,
                        "name": "purposeIndex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 844,
                        "src": "9443:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "9423:33:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "id": 853,
                      "name": "_purpose",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 791,
                      "src": "9460:8:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9423:45:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 869,
                  "nodeType": "WhileStatement",
                  "src": "9416:193:1"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 877,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 871,
                          "name": "purposeIndex",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 844,
                          "src": "9627:12:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "expression": {
                            "expression": {
                              "baseExpression": {
                                "id": 872,
                                "name": "keys",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1755,
                                "src": "9642:4:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Key_$1786_storage_$",
                                  "typeString": "mapping(bytes32 => struct Structs.Key storage ref)"
                                }
                              },
                              "id": 874,
                              "indexExpression": {
                                "id": 873,
                                "name": "_key",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 789,
                                "src": "9647:4:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "9642:10:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Key_$1786_storage",
                                "typeString": "struct Structs.Key storage ref"
                              }
                            },
                            "id": 875,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "9653:8:1",
                            "memberName": "purposes",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1781,
                            "src": "9642:19:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                              "typeString": "uint256[] storage ref"
                            }
                          },
                          "id": 876,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "9662:6:1",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "9642:26:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "9627:41:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4e6f6e4578697374696e673a204b657920646f65736e27742068617665207375636820707572706f7365",
                        "id": 878,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9670:44:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c5c6d7bd64c120db0a0dc884afccd0850100d55ba7968801315e930cfbbcdba6",
                          "typeString": "literal_string \"NonExisting: Key doesn't have such purpose\""
                        },
                        "value": "NonExisting: Key doesn't have such purpose"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c5c6d7bd64c120db0a0dc884afccd0850100d55ba7968801315e930cfbbcdba6",
                          "typeString": "literal_string \"NonExisting: Key doesn't have such purpose\""
                        }
                      ],
                      "id": 870,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "9619:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 879,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9619:96:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 880,
                  "nodeType": "ExpressionStatement",
                  "src": "9619:96:1"
                },
                {
                  "expression": {
                    "id": 899,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "expression": {
                          "baseExpression": {
                            "id": 881,
                            "name": "keys",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1755,
                            "src": "9726:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Key_$1786_storage_$",
                              "typeString": "mapping(bytes32 => struct Structs.Key storage ref)"
                            }
                          },
                          "id": 883,
                          "indexExpression": {
                            "id": 882,
                            "name": "_key",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 789,
                            "src": "9731:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9726:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Key_$1786_storage",
                            "typeString": "struct Structs.Key storage ref"
                          }
                        },
                        "id": 884,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "9737:8:1",
                        "memberName": "purposes",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1781,
                        "src": "9726:19:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                          "typeString": "uint256[] storage ref"
                        }
                      },
                      "id": 886,
                      "indexExpression": {
                        "id": 885,
                        "name": "purposeIndex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 844,
                        "src": "9746:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9726:33:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "baseExpression": {
                        "expression": {
                          "baseExpression": {
                            "id": 887,
                            "name": "keys",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1755,
                            "src": "9762:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Key_$1786_storage_$",
                              "typeString": "mapping(bytes32 => struct Structs.Key storage ref)"
                            }
                          },
                          "id": 889,
                          "indexExpression": {
                            "id": 888,
                            "name": "_key",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 789,
                            "src": "9767:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9762:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Key_$1786_storage",
                            "typeString": "struct Structs.Key storage ref"
                          }
                        },
                        "id": 890,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "9773:8:1",
                        "memberName": "purposes",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1781,
                        "src": "9762:19:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                          "typeString": "uint256[] storage ref"
                        }
                      },
                      "id": 898,
                      "indexExpression": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 897,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "expression": {
                              "baseExpression": {
                                "id": 891,
                                "name": "keys",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1755,
                                "src": "9782:4:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Key_$1786_storage_$",
                                  "typeString": "mapping(bytes32 => struct Structs.Key storage ref)"
                                }
                              },
                              "id": 893,
                              "indexExpression": {
                                "id": 892,
                                "name": "_key",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 789,
                                "src": "9787:4:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "9782:10:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Key_$1786_storage",
                                "typeString": "struct Structs.Key storage ref"
                              }
                            },
                            "id": 894,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "9793:8:1",
                            "memberName": "purposes",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1781,
                            "src": "9782:19:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                              "typeString": "uint256[] storage ref"
                            }
                          },
                          "id": 895,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "9802:6:1",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "9782:26:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "hexValue": "31",
                          "id": 896,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9811:1:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "9782:30:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "9762:51:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9726:87:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 900,
                  "nodeType": "ExpressionStatement",
                  "src": "9726:87:1"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "expression": {
                          "baseExpression": {
                            "id": 901,
                            "name": "keys",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1755,
                            "src": "9823:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Key_$1786_storage_$",
                              "typeString": "mapping(bytes32 => struct Structs.Key storage ref)"
                            }
                          },
                          "id": 903,
                          "indexExpression": {
                            "id": 902,
                            "name": "_key",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 789,
                            "src": "9828:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9823:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Key_$1786_storage",
                            "typeString": "struct Structs.Key storage ref"
                          }
                        },
                        "id": 904,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "9834:8:1",
                        "memberName": "purposes",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1781,
                        "src": "9823:19:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                          "typeString": "uint256[] storage ref"
                        }
                      },
                      "id": 905,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "9843:3:1",
                      "memberName": "pop",
                      "nodeType": "MemberAccess",
                      "src": "9823:23:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypop_nonpayable$_t_array$_t_uint256_$dyn_storage_ptr_$returns$__$bound_to$_t_array$_t_uint256_$dyn_storage_ptr_$",
                        "typeString": "function (uint256[] storage pointer)"
                      }
                    },
                    "id": 906,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9823:25:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 907,
                  "nodeType": "ExpressionStatement",
                  "src": "9823:25:1"
                },
                {
                  "assignments": [
                    909
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 909,
                      "mutability": "mutable",
                      "name": "keyIndex",
                      "nameLocation": "9864:8:1",
                      "nodeType": "VariableDeclaration",
                      "scope": 976,
                      "src": "9859:13:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 908,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "9859:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 911,
                  "initialValue": {
                    "hexValue": "30",
                    "id": 910,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "9875:1:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9859:17:1"
                },
                {
                  "body": {
                    "id": 922,
                    "nodeType": "Block",
                    "src": "9937:35:1",
                    "statements": [
                      {
                        "expression": {
                          "id": 920,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "9951:10:1",
                          "subExpression": {
                            "id": 919,
                            "name": "keyIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 909,
                            "src": "9951:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 921,
                        "nodeType": "ExpressionStatement",
                        "src": "9951:10:1"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 918,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 912,
                          "name": "keysByPurpose",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1760,
                          "src": "9894:13:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_array$_t_bytes32_$dyn_storage_$",
                            "typeString": "mapping(uint256 => bytes32[] storage ref)"
                          }
                        },
                        "id": 914,
                        "indexExpression": {
                          "id": 913,
                          "name": "_purpose",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 791,
                          "src": "9908:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9894:23:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                          "typeString": "bytes32[] storage ref"
                        }
                      },
                      "id": 916,
                      "indexExpression": {
                        "id": 915,
                        "name": "keyIndex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 909,
                        "src": "9918:8:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "9894:33:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "id": 917,
                      "name": "_key",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 789,
                      "src": "9931:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "9894:41:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 923,
                  "nodeType": "WhileStatement",
                  "src": "9887:85:1"
                },
                {
                  "expression": {
                    "id": 939,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 924,
                          "name": "keysByPurpose",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1760,
                          "src": "9982:13:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_array$_t_bytes32_$dyn_storage_$",
                            "typeString": "mapping(uint256 => bytes32[] storage ref)"
                          }
                        },
                        "id": 927,
                        "indexExpression": {
                          "id": 925,
                          "name": "_purpose",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 791,
                          "src": "9996:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9982:23:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                          "typeString": "bytes32[] storage ref"
                        }
                      },
                      "id": 928,
                      "indexExpression": {
                        "id": 926,
                        "name": "keyIndex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 909,
                        "src": "10006:8:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9982:33:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 929,
                          "name": "keysByPurpose",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1760,
                          "src": "10018:13:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_array$_t_bytes32_$dyn_storage_$",
                            "typeString": "mapping(uint256 => bytes32[] storage ref)"
                          }
                        },
                        "id": 931,
                        "indexExpression": {
                          "id": 930,
                          "name": "_purpose",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 791,
                          "src": "10032:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "10018:23:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                          "typeString": "bytes32[] storage ref"
                        }
                      },
                      "id": 938,
                      "indexExpression": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 937,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "baseExpression": {
                              "id": 932,
                              "name": "keysByPurpose",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1760,
                              "src": "10042:13:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_array$_t_bytes32_$dyn_storage_$",
                                "typeString": "mapping(uint256 => bytes32[] storage ref)"
                              }
                            },
                            "id": 934,
                            "indexExpression": {
                              "id": 933,
                              "name": "_purpose",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 791,
                              "src": "10056:8:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "10042:23:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                              "typeString": "bytes32[] storage ref"
                            }
                          },
                          "id": 935,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "10066:6:1",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "10042:30:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "hexValue": "31",
                          "id": 936,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10075:1:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "10042:34:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "10018:59:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "9982:95:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 940,
                  "nodeType": "ExpressionStatement",
                  "src": "9982:95:1"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "baseExpression": {
                          "id": 941,
                          "name": "keysByPurpose",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1760,
                          "src": "10087:13:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_array$_t_bytes32_$dyn_storage_$",
                            "typeString": "mapping(uint256 => bytes32[] storage ref)"
                          }
                        },
                        "id": 943,
                        "indexExpression": {
                          "id": 942,
                          "name": "_purpose",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 791,
                          "src": "10101:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "10087:23:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                          "typeString": "bytes32[] storage ref"
                        }
                      },
                      "id": 944,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "10111:3:1",
                      "memberName": "pop",
                      "nodeType": "MemberAccess",
                      "src": "10087:27:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypop_nonpayable$_t_array$_t_bytes32_$dyn_storage_ptr_$returns$__$bound_to$_t_array$_t_bytes32_$dyn_storage_ptr_$",
                        "typeString": "function (bytes32[] storage pointer)"
                      }
                    },
                    "id": 945,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10087:29:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 946,
                  "nodeType": "ExpressionStatement",
                  "src": "10087:29:1"
                },
                {
                  "assignments": [
                    948
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 948,
                      "mutability": "mutable",
                      "name": "keyType",
                      "nameLocation": "10132:7:1",
                      "nodeType": "VariableDeclaration",
                      "scope": 976,
                      "src": "10127:12:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 947,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "10127:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 953,
                  "initialValue": {
                    "expression": {
                      "baseExpression": {
                        "id": 949,
                        "name": "keys",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1755,
                        "src": "10142:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Key_$1786_storage_$",
                          "typeString": "mapping(bytes32 => struct Structs.Key storage ref)"
                        }
                      },
                      "id": 951,
                      "indexExpression": {
                        "id": 950,
                        "name": "_key",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 789,
                        "src": "10147:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "10142:10:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Key_$1786_storage",
                        "typeString": "struct Structs.Key storage ref"
                      }
                    },
                    "id": 952,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "10153:7:1",
                    "memberName": "keyType",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 1783,
                    "src": "10142:18:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10127:33:1"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 960,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "expression": {
                          "baseExpression": {
                            "id": 954,
                            "name": "keys",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1755,
                            "src": "10175:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Key_$1786_storage_$",
                              "typeString": "mapping(bytes32 => struct Structs.Key storage ref)"
                            }
                          },
                          "id": 956,
                          "indexExpression": {
                            "id": 955,
                            "name": "_key",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 789,
                            "src": "10180:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "10175:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Key_$1786_storage",
                            "typeString": "struct Structs.Key storage ref"
                          }
                        },
                        "id": 957,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "10186:8:1",
                        "memberName": "purposes",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1781,
                        "src": "10175:19:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                          "typeString": "uint256[] storage ref"
                        }
                      },
                      "id": 958,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "10195:6:1",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "10175:26:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 959,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10205:1:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "10175:31:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 967,
                  "nodeType": "IfStatement",
                  "src": "10171:79:1",
                  "trueBody": {
                    "id": 966,
                    "nodeType": "Block",
                    "src": "10208:42:1",
                    "statements": [
                      {
                        "expression": {
                          "id": 964,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "10222:17:1",
                          "subExpression": {
                            "baseExpression": {
                              "id": 961,
                              "name": "keys",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1755,
                              "src": "10229:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Key_$1786_storage_$",
                                "typeString": "mapping(bytes32 => struct Structs.Key storage ref)"
                              }
                            },
                            "id": 963,
                            "indexExpression": {
                              "id": 962,
                              "name": "_key",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 789,
                              "src": "10234:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "10229:10:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Key_$1786_storage",
                              "typeString": "struct Structs.Key storage ref"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 965,
                        "nodeType": "ExpressionStatement",
                        "src": "10222:17:1"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 969,
                        "name": "_key",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 789,
                        "src": "10276:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 970,
                        "name": "_purpose",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 791,
                        "src": "10282:8:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 971,
                        "name": "keyType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 948,
                        "src": "10292:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 968,
                      "name": "KeyRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1516,
                      "src": "10265:10:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes32,uint256,uint256)"
                      }
                    },
                    "id": 972,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10265:35:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 973,
                  "nodeType": "EmitStatement",
                  "src": "10260:40:1"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 974,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "10318:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 798,
                  "id": 975,
                  "nodeType": "Return",
                  "src": "10311:11:1"
                }
              ]
            },
            "documentation": {
              "id": 787,
              "nodeType": "StructuredDocumentation",
              "src": "8807:55:1",
              "text": " @notice Remove the purpose from a key."
            },
            "functionSelector": "53d413c5",
            "id": 977,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 794,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 793,
                  "name": "delegatedOnly",
                  "nameLocations": [
                    "8933:13:1"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 294,
                  "src": "8933:13:1"
                },
                "nodeType": "ModifierInvocation",
                "src": "8933:13:1"
              }
            ],
            "name": "removeKey",
            "nameLocation": "8876:9:1",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 795,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8951:8:1"
            },
            "parameters": {
              "id": 792,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 789,
                  "mutability": "mutable",
                  "name": "_key",
                  "nameLocation": "8894:4:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 977,
                  "src": "8886:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 788,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8886:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 791,
                  "mutability": "mutable",
                  "name": "_purpose",
                  "nameLocation": "8908:8:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 977,
                  "src": "8900:16:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 790,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8900:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8885:32:1"
            },
            "returnParameters": {
              "id": 798,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 797,
                  "mutability": "mutable",
                  "name": "success",
                  "nameLocation": "8978:7:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 977,
                  "src": "8973:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 796,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8973:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8972:14:1"
            },
            "scope": 1411,
            "src": "8867:1462:1",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              1598
            ],
            "body": {
              "id": 1035,
              "nodeType": "Block",
              "src": "10555:345:1",
              "statements": [
                {
                  "assignments": [
                    990
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 990,
                      "mutability": "mutable",
                      "name": "key",
                      "nameLocation": "10576:3:1",
                      "nodeType": "VariableDeclaration",
                      "scope": 1035,
                      "src": "10565:14:1",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Key_$1786_memory_ptr",
                        "typeString": "struct Structs.Key"
                      },
                      "typeName": {
                        "id": 989,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 988,
                          "name": "Key",
                          "nameLocations": [
                            "10565:3:1"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 1786,
                          "src": "10565:3:1"
                        },
                        "referencedDeclaration": 1786,
                        "src": "10565:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Key_$1786_storage_ptr",
                          "typeString": "struct Structs.Key"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 994,
                  "initialValue": {
                    "baseExpression": {
                      "id": 991,
                      "name": "keys",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1755,
                      "src": "10582:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Key_$1786_storage_$",
                        "typeString": "mapping(bytes32 => struct Structs.Key storage ref)"
                      }
                    },
                    "id": 993,
                    "indexExpression": {
                      "id": 992,
                      "name": "_key",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 980,
                      "src": "10587:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "10582:10:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Key_$1786_storage",
                      "typeString": "struct Structs.Key storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10565:27:1"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 998,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 995,
                        "name": "key",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 990,
                        "src": "10606:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Key_$1786_memory_ptr",
                          "typeString": "struct Structs.Key memory"
                        }
                      },
                      "id": 996,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "10610:3:1",
                      "memberName": "key",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1785,
                      "src": "10606:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 997,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10617:1:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "10606:12:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1001,
                  "nodeType": "IfStatement",
                  "src": "10602:30:1",
                  "trueBody": {
                    "expression": {
                      "hexValue": "66616c7365",
                      "id": 999,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10627:5:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "functionReturnParameters": 987,
                    "id": 1000,
                    "nodeType": "Return",
                    "src": "10620:12:1"
                  }
                },
                {
                  "body": {
                    "id": 1031,
                    "nodeType": "Block",
                    "src": "10732:139:1",
                    "statements": [
                      {
                        "assignments": [
                          1015
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1015,
                            "mutability": "mutable",
                            "name": "purpose",
                            "nameLocation": "10754:7:1",
                            "nodeType": "VariableDeclaration",
                            "scope": 1031,
                            "src": "10746:15:1",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1014,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "10746:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1020,
                        "initialValue": {
                          "baseExpression": {
                            "expression": {
                              "id": 1016,
                              "name": "key",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 990,
                              "src": "10764:3:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Key_$1786_memory_ptr",
                                "typeString": "struct Structs.Key memory"
                              }
                            },
                            "id": 1017,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "10768:8:1",
                            "memberName": "purposes",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1781,
                            "src": "10764:12:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 1019,
                          "indexExpression": {
                            "id": 1018,
                            "name": "keyPurposeIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1003,
                            "src": "10777:15:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "10764:29:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "10746:47:1"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 1027,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1023,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1021,
                              "name": "purpose",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1015,
                              "src": "10812:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "hexValue": "31",
                              "id": 1022,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10823:1:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "10812:12:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1026,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1024,
                              "name": "purpose",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1015,
                              "src": "10828:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "id": 1025,
                              "name": "_purpose",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 982,
                              "src": "10839:8:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "10828:19:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "10812:35:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1030,
                        "nodeType": "IfStatement",
                        "src": "10808:52:1",
                        "trueBody": {
                          "expression": {
                            "hexValue": "74727565",
                            "id": 1028,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10856:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "functionReturnParameters": 987,
                          "id": 1029,
                          "nodeType": "Return",
                          "src": "10849:11:1"
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1010,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1006,
                      "name": "keyPurposeIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1003,
                      "src": "10674:15:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "expression": {
                          "id": 1007,
                          "name": "key",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 990,
                          "src": "10692:3:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Key_$1786_memory_ptr",
                            "typeString": "struct Structs.Key memory"
                          }
                        },
                        "id": 1008,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "10696:8:1",
                        "memberName": "purposes",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1781,
                        "src": "10692:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[] memory"
                        }
                      },
                      "id": 1009,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "10705:6:1",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "10692:19:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10674:37:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1032,
                  "initializationExpression": {
                    "assignments": [
                      1003
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1003,
                        "mutability": "mutable",
                        "name": "keyPurposeIndex",
                        "nameLocation": "10653:15:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1032,
                        "src": "10648:20:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1002,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "10648:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 1005,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 1004,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10671:1:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "10648:24:1"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 1012,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "10713:17:1",
                      "subExpression": {
                        "id": 1011,
                        "name": "keyPurposeIndex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1003,
                        "src": "10713:15:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1013,
                    "nodeType": "ExpressionStatement",
                    "src": "10713:17:1"
                  },
                  "nodeType": "ForStatement",
                  "src": "10643:228:1"
                },
                {
                  "expression": {
                    "hexValue": "66616c7365",
                    "id": 1033,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "10888:5:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 987,
                  "id": 1034,
                  "nodeType": "Return",
                  "src": "10881:12:1"
                }
              ]
            },
            "documentation": {
              "id": 978,
              "nodeType": "StructuredDocumentation",
              "src": "10336:97:1",
              "text": " @notice Returns true if the key has MANAGEMENT purpose or the specified purpose."
            },
            "functionSelector": "d202158d",
            "id": 1036,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "keyHasPurpose",
            "nameLocation": "10447:13:1",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 984,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "10508:8:1"
            },
            "parameters": {
              "id": 983,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 980,
                  "mutability": "mutable",
                  "name": "_key",
                  "nameLocation": "10469:4:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 1036,
                  "src": "10461:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 979,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10461:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 982,
                  "mutability": "mutable",
                  "name": "_purpose",
                  "nameLocation": "10483:8:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 1036,
                  "src": "10475:16:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 981,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10475:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10460:32:1"
            },
            "returnParameters": {
              "id": 987,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 986,
                  "mutability": "mutable",
                  "name": "result",
                  "nameLocation": "10543:6:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 1036,
                  "src": "10538:11:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 985,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "10538:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10537:13:1"
            },
            "scope": 1411,
            "src": "10438:462:1",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              1725
            ],
            "body": {
              "id": 1212,
              "nodeType": "Block",
              "src": "12259:1380:1",
              "statements": [
                {
                  "assignments": [
                    1058
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1058,
                      "mutability": "mutable",
                      "name": "claimId",
                      "nameLocation": "12277:7:1",
                      "nodeType": "VariableDeclaration",
                      "scope": 1212,
                      "src": "12269:15:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 1057,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "12269:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1066,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 1062,
                            "name": "_issuer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1043,
                            "src": "12308:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 1063,
                            "name": "_topic",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1039,
                            "src": "12317:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 1060,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "12297:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 1061,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberLocation": "12301:6:1",
                          "memberName": "encode",
                          "nodeType": "MemberAccess",
                          "src": "12297:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 1064,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12297:27:1",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1059,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4294967288,
                      "src": "12287:9:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 1065,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12287:38:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12269:56:1"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 1073,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 1067,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967281,
                        "src": "12340:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 1068,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "12344:6:1",
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "12340:10:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "id": 1071,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967268,
                          "src": "12362:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Identity_$1411",
                            "typeString": "contract Identity"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_Identity_$1411",
                            "typeString": "contract Identity"
                          }
                        ],
                        "id": 1070,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "12354:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 1069,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "12354:7:1",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 1072,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12354:13:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "12340:27:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1089,
                  "nodeType": "IfStatement",
                  "src": "12336:172:1",
                  "trueBody": {
                    "id": 1088,
                    "nodeType": "Block",
                    "src": "12369:139:1",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "expression": {
                                            "id": 1079,
                                            "name": "msg",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4294967281,
                                            "src": "12426:3:1",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_magic_message",
                                              "typeString": "msg"
                                            }
                                          },
                                          "id": 1080,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberLocation": "12430:6:1",
                                          "memberName": "sender",
                                          "nodeType": "MemberAccess",
                                          "src": "12426:10:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "expression": {
                                          "id": 1077,
                                          "name": "abi",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4294967295,
                                          "src": "12415:3:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_abi",
                                            "typeString": "abi"
                                          }
                                        },
                                        "id": 1078,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "memberLocation": "12419:6:1",
                                        "memberName": "encode",
                                        "nodeType": "MemberAccess",
                                        "src": "12415:10:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                          "typeString": "function () pure returns (bytes memory)"
                                        }
                                      },
                                      "id": 1081,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "12415:22:1",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    ],
                                    "id": 1076,
                                    "name": "keccak256",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4294967288,
                                    "src": "12405:9:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                      "typeString": "function (bytes memory) pure returns (bytes32)"
                                    }
                                  },
                                  "id": 1082,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "12405:33:1",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "hexValue": "33",
                                  "id": 1083,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "12440:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_3_by_1",
                                    "typeString": "int_const 3"
                                  },
                                  "value": "3"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_rational_3_by_1",
                                    "typeString": "int_const 3"
                                  }
                                ],
                                "id": 1075,
                                "name": "keyHasPurpose",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1036,
                                "src": "12391:13:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (bytes32,uint256) view returns (bool)"
                                }
                              },
                              "id": 1084,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12391:51:1",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "5065726d697373696f6e733a2053656e64657220646f6573206e6f74206861766520636c61696d207369676e6572206b6579",
                              "id": 1085,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "12444:52:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_7b35df432d579b46a32d099f957987ceecae8614c49c5a100b4430714240d197",
                                "typeString": "literal_string \"Permissions: Sender does not have claim signer key\""
                              },
                              "value": "Permissions: Sender does not have claim signer key"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_7b35df432d579b46a32d099f957987ceecae8614c49c5a100b4430714240d197",
                                "typeString": "literal_string \"Permissions: Sender does not have claim signer key\""
                              }
                            ],
                            "id": 1074,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967278,
                              4294967278
                            ],
                            "referencedDeclaration": 4294967278,
                            "src": "12383:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1086,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12383:114:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1087,
                        "nodeType": "ExpressionStatement",
                        "src": "12383:114:1"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 1095,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 1090,
                          "name": "claims",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1770,
                          "src": "12522:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Claim_$1810_storage_$",
                            "typeString": "mapping(bytes32 => struct Structs.Claim storage ref)"
                          }
                        },
                        "id": 1092,
                        "indexExpression": {
                          "id": 1091,
                          "name": "claimId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1058,
                          "src": "12529:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "12522:15:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Claim_$1810_storage",
                          "typeString": "struct Structs.Claim storage ref"
                        }
                      },
                      "id": 1093,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "12538:6:1",
                      "memberName": "issuer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1803,
                      "src": "12522:22:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "id": 1094,
                      "name": "_issuer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1043,
                      "src": "12548:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "12522:33:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 1208,
                    "nodeType": "Block",
                    "src": "13109:499:1",
                    "statements": [
                      {
                        "expression": {
                          "id": 1161,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 1156,
                                "name": "claims",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1770,
                                "src": "13123:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Claim_$1810_storage_$",
                                  "typeString": "mapping(bytes32 => struct Structs.Claim storage ref)"
                                }
                              },
                              "id": 1158,
                              "indexExpression": {
                                "id": 1157,
                                "name": "claimId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1058,
                                "src": "13130:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "13123:15:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Claim_$1810_storage",
                                "typeString": "struct Structs.Claim storage ref"
                              }
                            },
                            "id": 1159,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "13139:5:1",
                            "memberName": "topic",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1799,
                            "src": "13123:21:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1160,
                            "name": "_topic",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1039,
                            "src": "13147:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "13123:30:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1162,
                        "nodeType": "ExpressionStatement",
                        "src": "13123:30:1"
                      },
                      {
                        "expression": {
                          "id": 1168,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 1163,
                                "name": "claims",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1770,
                                "src": "13167:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Claim_$1810_storage_$",
                                  "typeString": "mapping(bytes32 => struct Structs.Claim storage ref)"
                                }
                              },
                              "id": 1165,
                              "indexExpression": {
                                "id": 1164,
                                "name": "claimId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1058,
                                "src": "13174:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "13167:15:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Claim_$1810_storage",
                                "typeString": "struct Structs.Claim storage ref"
                              }
                            },
                            "id": 1166,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "13183:6:1",
                            "memberName": "scheme",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1801,
                            "src": "13167:22:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1167,
                            "name": "_scheme",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1041,
                            "src": "13192:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "13167:32:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1169,
                        "nodeType": "ExpressionStatement",
                        "src": "13167:32:1"
                      },
                      {
                        "expression": {
                          "id": 1175,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 1170,
                                "name": "claims",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1770,
                                "src": "13213:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Claim_$1810_storage_$",
                                  "typeString": "mapping(bytes32 => struct Structs.Claim storage ref)"
                                }
                              },
                              "id": 1172,
                              "indexExpression": {
                                "id": 1171,
                                "name": "claimId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1058,
                                "src": "13220:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "13213:15:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Claim_$1810_storage",
                                "typeString": "struct Structs.Claim storage ref"
                              }
                            },
                            "id": 1173,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "13229:6:1",
                            "memberName": "issuer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1803,
                            "src": "13213:22:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1174,
                            "name": "_issuer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1043,
                            "src": "13238:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "13213:32:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 1176,
                        "nodeType": "ExpressionStatement",
                        "src": "13213:32:1"
                      },
                      {
                        "expression": {
                          "id": 1182,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 1177,
                                "name": "claims",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1770,
                                "src": "13259:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Claim_$1810_storage_$",
                                  "typeString": "mapping(bytes32 => struct Structs.Claim storage ref)"
                                }
                              },
                              "id": 1179,
                              "indexExpression": {
                                "id": 1178,
                                "name": "claimId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1058,
                                "src": "13266:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "13259:15:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Claim_$1810_storage",
                                "typeString": "struct Structs.Claim storage ref"
                              }
                            },
                            "id": 1180,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "13275:9:1",
                            "memberName": "signature",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1805,
                            "src": "13259:25:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage",
                              "typeString": "bytes storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1181,
                            "name": "_signature",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1045,
                            "src": "13287:10:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "13259:38:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage",
                            "typeString": "bytes storage ref"
                          }
                        },
                        "id": 1183,
                        "nodeType": "ExpressionStatement",
                        "src": "13259:38:1"
                      },
                      {
                        "expression": {
                          "id": 1189,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 1184,
                                "name": "claims",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1770,
                                "src": "13311:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Claim_$1810_storage_$",
                                  "typeString": "mapping(bytes32 => struct Structs.Claim storage ref)"
                                }
                              },
                              "id": 1186,
                              "indexExpression": {
                                "id": 1185,
                                "name": "claimId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1058,
                                "src": "13318:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "13311:15:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Claim_$1810_storage",
                                "typeString": "struct Structs.Claim storage ref"
                              }
                            },
                            "id": 1187,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "13327:4:1",
                            "memberName": "data",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1807,
                            "src": "13311:20:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage",
                              "typeString": "bytes storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1188,
                            "name": "_data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1047,
                            "src": "13334:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "13311:28:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage",
                            "typeString": "bytes storage ref"
                          }
                        },
                        "id": 1190,
                        "nodeType": "ExpressionStatement",
                        "src": "13311:28:1"
                      },
                      {
                        "expression": {
                          "id": 1196,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 1191,
                                "name": "claims",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1770,
                                "src": "13353:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Claim_$1810_storage_$",
                                  "typeString": "mapping(bytes32 => struct Structs.Claim storage ref)"
                                }
                              },
                              "id": 1193,
                              "indexExpression": {
                                "id": 1192,
                                "name": "claimId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1058,
                                "src": "13360:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "13353:15:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Claim_$1810_storage",
                                "typeString": "struct Structs.Claim storage ref"
                              }
                            },
                            "id": 1194,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "13369:3:1",
                            "memberName": "uri",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1809,
                            "src": "13353:19:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1195,
                            "name": "_uri",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1049,
                            "src": "13375:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "13353:26:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 1197,
                        "nodeType": "ExpressionStatement",
                        "src": "13353:26:1"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 1199,
                              "name": "claimId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1058,
                              "src": "13429:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 1200,
                              "name": "_topic",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1039,
                              "src": "13454:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 1201,
                              "name": "_scheme",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1041,
                              "src": "13478:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 1202,
                              "name": "_issuer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1043,
                              "src": "13503:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1203,
                              "name": "_signature",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1045,
                              "src": "13528:10:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 1204,
                              "name": "_data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1047,
                              "src": "13556:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 1205,
                              "name": "_uri",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1049,
                              "src": "13579:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 1198,
                            "name": "ClaimChanged",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1680,
                            "src": "13399:12:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint256_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bytes32,uint256,uint256,address,bytes memory,bytes memory,string memory)"
                            }
                          },
                          "id": 1206,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13399:198:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1207,
                        "nodeType": "EmitStatement",
                        "src": "13394:203:1"
                      }
                    ]
                  },
                  "id": 1209,
                  "nodeType": "IfStatement",
                  "src": "12518:1090:1",
                  "trueBody": {
                    "id": 1155,
                    "nodeType": "Block",
                    "src": "12557:546:1",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1100,
                              "name": "claimId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1058,
                              "src": "12598:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "baseExpression": {
                                "id": 1096,
                                "name": "claimsByTopic",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1775,
                                "src": "12571:13:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_array$_t_bytes32_$dyn_storage_$",
                                  "typeString": "mapping(uint256 => bytes32[] storage ref)"
                                }
                              },
                              "id": 1098,
                              "indexExpression": {
                                "id": 1097,
                                "name": "_topic",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1039,
                                "src": "12585:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "12571:21:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                                "typeString": "bytes32[] storage ref"
                              }
                            },
                            "id": 1099,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "12593:4:1",
                            "memberName": "push",
                            "nodeType": "MemberAccess",
                            "src": "12571:26:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_arraypush_nonpayable$_t_array$_t_bytes32_$dyn_storage_ptr_$_t_bytes32_$returns$__$bound_to$_t_array$_t_bytes32_$dyn_storage_ptr_$",
                              "typeString": "function (bytes32[] storage pointer,bytes32)"
                            }
                          },
                          "id": 1101,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12571:35:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1102,
                        "nodeType": "ExpressionStatement",
                        "src": "12571:35:1"
                      },
                      {
                        "expression": {
                          "id": 1108,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 1103,
                                "name": "claims",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1770,
                                "src": "12620:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Claim_$1810_storage_$",
                                  "typeString": "mapping(bytes32 => struct Structs.Claim storage ref)"
                                }
                              },
                              "id": 1105,
                              "indexExpression": {
                                "id": 1104,
                                "name": "claimId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1058,
                                "src": "12627:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "12620:15:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Claim_$1810_storage",
                                "typeString": "struct Structs.Claim storage ref"
                              }
                            },
                            "id": 1106,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "12636:5:1",
                            "memberName": "topic",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1799,
                            "src": "12620:21:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1107,
                            "name": "_topic",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1039,
                            "src": "12644:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "12620:30:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1109,
                        "nodeType": "ExpressionStatement",
                        "src": "12620:30:1"
                      },
                      {
                        "expression": {
                          "id": 1115,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 1110,
                                "name": "claims",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1770,
                                "src": "12664:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Claim_$1810_storage_$",
                                  "typeString": "mapping(bytes32 => struct Structs.Claim storage ref)"
                                }
                              },
                              "id": 1112,
                              "indexExpression": {
                                "id": 1111,
                                "name": "claimId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1058,
                                "src": "12671:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "12664:15:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Claim_$1810_storage",
                                "typeString": "struct Structs.Claim storage ref"
                              }
                            },
                            "id": 1113,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "12680:6:1",
                            "memberName": "scheme",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1801,
                            "src": "12664:22:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1114,
                            "name": "_scheme",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1041,
                            "src": "12689:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "12664:32:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1116,
                        "nodeType": "ExpressionStatement",
                        "src": "12664:32:1"
                      },
                      {
                        "expression": {
                          "id": 1122,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 1117,
                                "name": "claims",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1770,
                                "src": "12710:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Claim_$1810_storage_$",
                                  "typeString": "mapping(bytes32 => struct Structs.Claim storage ref)"
                                }
                              },
                              "id": 1119,
                              "indexExpression": {
                                "id": 1118,
                                "name": "claimId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1058,
                                "src": "12717:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "12710:15:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Claim_$1810_storage",
                                "typeString": "struct Structs.Claim storage ref"
                              }
                            },
                            "id": 1120,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "12726:6:1",
                            "memberName": "issuer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1803,
                            "src": "12710:22:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1121,
                            "name": "_issuer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1043,
                            "src": "12735:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "12710:32:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 1123,
                        "nodeType": "ExpressionStatement",
                        "src": "12710:32:1"
                      },
                      {
                        "expression": {
                          "id": 1129,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 1124,
                                "name": "claims",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1770,
                                "src": "12756:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Claim_$1810_storage_$",
                                  "typeString": "mapping(bytes32 => struct Structs.Claim storage ref)"
                                }
                              },
                              "id": 1126,
                              "indexExpression": {
                                "id": 1125,
                                "name": "claimId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1058,
                                "src": "12763:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "12756:15:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Claim_$1810_storage",
                                "typeString": "struct Structs.Claim storage ref"
                              }
                            },
                            "id": 1127,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "12772:9:1",
                            "memberName": "signature",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1805,
                            "src": "12756:25:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage",
                              "typeString": "bytes storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1128,
                            "name": "_signature",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1045,
                            "src": "12784:10:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "12756:38:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage",
                            "typeString": "bytes storage ref"
                          }
                        },
                        "id": 1130,
                        "nodeType": "ExpressionStatement",
                        "src": "12756:38:1"
                      },
                      {
                        "expression": {
                          "id": 1136,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 1131,
                                "name": "claims",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1770,
                                "src": "12808:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Claim_$1810_storage_$",
                                  "typeString": "mapping(bytes32 => struct Structs.Claim storage ref)"
                                }
                              },
                              "id": 1133,
                              "indexExpression": {
                                "id": 1132,
                                "name": "claimId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1058,
                                "src": "12815:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "12808:15:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Claim_$1810_storage",
                                "typeString": "struct Structs.Claim storage ref"
                              }
                            },
                            "id": 1134,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "12824:4:1",
                            "memberName": "data",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1807,
                            "src": "12808:20:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage",
                              "typeString": "bytes storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1135,
                            "name": "_data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1047,
                            "src": "12831:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "12808:28:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage",
                            "typeString": "bytes storage ref"
                          }
                        },
                        "id": 1137,
                        "nodeType": "ExpressionStatement",
                        "src": "12808:28:1"
                      },
                      {
                        "expression": {
                          "id": 1143,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 1138,
                                "name": "claims",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1770,
                                "src": "12850:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Claim_$1810_storage_$",
                                  "typeString": "mapping(bytes32 => struct Structs.Claim storage ref)"
                                }
                              },
                              "id": 1140,
                              "indexExpression": {
                                "id": 1139,
                                "name": "claimId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1058,
                                "src": "12857:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "12850:15:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Claim_$1810_storage",
                                "typeString": "struct Structs.Claim storage ref"
                              }
                            },
                            "id": 1141,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "12866:3:1",
                            "memberName": "uri",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1809,
                            "src": "12850:19:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1142,
                            "name": "_uri",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1049,
                            "src": "12872:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "12850:26:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 1144,
                        "nodeType": "ExpressionStatement",
                        "src": "12850:26:1"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 1146,
                              "name": "claimId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1058,
                              "src": "12924:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 1147,
                              "name": "_topic",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1039,
                              "src": "12949:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 1148,
                              "name": "_scheme",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1041,
                              "src": "12973:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 1149,
                              "name": "_issuer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1043,
                              "src": "12998:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1150,
                              "name": "_signature",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1045,
                              "src": "13023:10:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 1151,
                              "name": "_data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1047,
                              "src": "13051:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 1152,
                              "name": "_uri",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1049,
                              "src": "13074:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 1145,
                            "name": "ClaimAdded",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1646,
                            "src": "12896:10:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint256_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bytes32,uint256,uint256,address,bytes memory,bytes memory,string memory)"
                            }
                          },
                          "id": 1153,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12896:196:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1154,
                        "nodeType": "EmitStatement",
                        "src": "12891:201:1"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 1210,
                    "name": "claimId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1058,
                    "src": "13625:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 1056,
                  "id": 1211,
                  "nodeType": "Return",
                  "src": "13618:14:1"
                }
              ]
            },
            "documentation": {
              "id": 1037,
              "nodeType": "StructuredDocumentation",
              "src": "10906:1078:1",
              "text": " @notice Implementation of the addClaim function from the ERC-735 standard\n  Require that the msg.sender has claim signer key.\n @param _topic The type of claim\n @param _scheme The scheme with which this claim SHOULD be verified or how it should be processed.\n @param _issuer The issuers identity contract address, or the address used to sign the above signature.\n @param _signature Signature which is the proof that the claim issuer issued a claim of topic for this identity.\n it MUST be a signed message of the following structure: keccak256(abi.encode(address identityHolder_address, uint256 _ topic, bytes data))\n @param _data The hash of the claim data, sitting in another location, a bit-mask, call data, or actual data based on the claim scheme.\n @param _uri The location of the claim, this can be HTTP links, swarm hashes, IPFS hashes, and such.\n @return claimRequestId Returns claimRequestId: COULD be send to the approve function, to approve or reject this claim.\n triggers ClaimAdded event."
            },
            "functionSelector": "b1a34e0d",
            "id": 1213,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 1052,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 1051,
                  "name": "delegatedOnly",
                  "nameLocations": [
                    "12191:13:1"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 294,
                  "src": "12191:13:1"
                },
                "nodeType": "ModifierInvocation",
                "src": "12191:13:1"
              }
            ],
            "name": "addClaim",
            "nameLocation": "11998:8:1",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1053,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "12209:8:1"
            },
            "parameters": {
              "id": 1050,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1039,
                  "mutability": "mutable",
                  "name": "_topic",
                  "nameLocation": "12024:6:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 1213,
                  "src": "12016:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1038,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12016:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1041,
                  "mutability": "mutable",
                  "name": "_scheme",
                  "nameLocation": "12048:7:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 1213,
                  "src": "12040:15:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1040,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12040:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1043,
                  "mutability": "mutable",
                  "name": "_issuer",
                  "nameLocation": "12073:7:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 1213,
                  "src": "12065:15:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1042,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12065:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1045,
                  "mutability": "mutable",
                  "name": "_signature",
                  "nameLocation": "12103:10:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 1213,
                  "src": "12090:23:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1044,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "12090:5:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1047,
                  "mutability": "mutable",
                  "name": "_data",
                  "nameLocation": "12136:5:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 1213,
                  "src": "12123:18:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1046,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "12123:5:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1049,
                  "mutability": "mutable",
                  "name": "_uri",
                  "nameLocation": "12165:4:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 1213,
                  "src": "12151:18:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1048,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "12151:6:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12006:169:1"
            },
            "returnParameters": {
              "id": 1056,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1055,
                  "mutability": "mutable",
                  "name": "claimRequestId",
                  "nameLocation": "12239:14:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 1213,
                  "src": "12231:22:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1054,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12231:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12230:24:1"
            },
            "scope": 1411,
            "src": "11989:1650:1",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              1733
            ],
            "body": {
              "id": 1348,
              "nodeType": "Block",
              "src": "14165:986:1",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 1230,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 1224,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967281,
                        "src": "14179:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 1225,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "14183:6:1",
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "14179:10:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "id": 1228,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967268,
                          "src": "14201:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Identity_$1411",
                            "typeString": "contract Identity"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_Identity_$1411",
                            "typeString": "contract Identity"
                          }
                        ],
                        "id": 1227,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "14193:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 1226,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "14193:7:1",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 1229,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14193:13:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "14179:27:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1246,
                  "nodeType": "IfStatement",
                  "src": "14175:165:1",
                  "trueBody": {
                    "id": 1245,
                    "nodeType": "Block",
                    "src": "14208:132:1",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "expression": {
                                            "id": 1236,
                                            "name": "msg",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4294967281,
                                            "src": "14265:3:1",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_magic_message",
                                              "typeString": "msg"
                                            }
                                          },
                                          "id": 1237,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberLocation": "14269:6:1",
                                          "memberName": "sender",
                                          "nodeType": "MemberAccess",
                                          "src": "14265:10:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "expression": {
                                          "id": 1234,
                                          "name": "abi",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4294967295,
                                          "src": "14254:3:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_abi",
                                            "typeString": "abi"
                                          }
                                        },
                                        "id": 1235,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "memberLocation": "14258:6:1",
                                        "memberName": "encode",
                                        "nodeType": "MemberAccess",
                                        "src": "14254:10:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                          "typeString": "function () pure returns (bytes memory)"
                                        }
                                      },
                                      "id": 1238,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "14254:22:1",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    ],
                                    "id": 1233,
                                    "name": "keccak256",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4294967288,
                                    "src": "14244:9:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                      "typeString": "function (bytes memory) pure returns (bytes32)"
                                    }
                                  },
                                  "id": 1239,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "14244:33:1",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "hexValue": "33",
                                  "id": 1240,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "14279:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_3_by_1",
                                    "typeString": "int_const 3"
                                  },
                                  "value": "3"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_rational_3_by_1",
                                    "typeString": "int_const 3"
                                  }
                                ],
                                "id": 1232,
                                "name": "keyHasPurpose",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1036,
                                "src": "14230:13:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (bytes32,uint256) view returns (bool)"
                                }
                              },
                              "id": 1241,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14230:51:1",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "5065726d697373696f6e733a2053656e64657220646f6573206e6f74206861766520434c41494d206b6579",
                              "id": 1242,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14283:45:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_86f6f17a299db15bd5520d80701f10acbd3f85058227676cf3a946fcbf6dc7be",
                                "typeString": "literal_string \"Permissions: Sender does not have CLAIM key\""
                              },
                              "value": "Permissions: Sender does not have CLAIM key"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_86f6f17a299db15bd5520d80701f10acbd3f85058227676cf3a946fcbf6dc7be",
                                "typeString": "literal_string \"Permissions: Sender does not have CLAIM key\""
                              }
                            ],
                            "id": 1231,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967278,
                              4294967278
                            ],
                            "referencedDeclaration": 4294967278,
                            "src": "14222:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1243,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14222:107:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1244,
                        "nodeType": "ExpressionStatement",
                        "src": "14222:107:1"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1252,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 1247,
                          "name": "claims",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1770,
                          "src": "14354:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Claim_$1810_storage_$",
                            "typeString": "mapping(bytes32 => struct Structs.Claim storage ref)"
                          }
                        },
                        "id": 1249,
                        "indexExpression": {
                          "id": 1248,
                          "name": "_claimId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1216,
                          "src": "14361:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "14354:16:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Claim_$1810_storage",
                          "typeString": "struct Structs.Claim storage ref"
                        }
                      },
                      "id": 1250,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "14371:5:1",
                      "memberName": "topic",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1799,
                      "src": "14354:22:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 1251,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14380:1:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "14354:27:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1258,
                  "nodeType": "IfStatement",
                  "src": "14350:111:1",
                  "trueBody": {
                    "id": 1257,
                    "nodeType": "Block",
                    "src": "14383:78:1",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "hexValue": "4e6f6e4578697374696e673a205468657265206973206e6f20636c61696d20776974682074686973204944",
                              "id": 1254,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14404:45:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_5abac270f6dfe9fec0cffc69c1e2c0be20d5e956877e37120e8a684061fa199a",
                                "typeString": "literal_string \"NonExisting: There is no claim with this ID\""
                              },
                              "value": "NonExisting: There is no claim with this ID"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_5abac270f6dfe9fec0cffc69c1e2c0be20d5e956877e37120e8a684061fa199a",
                                "typeString": "literal_string \"NonExisting: There is no claim with this ID\""
                              }
                            ],
                            "id": 1253,
                            "name": "revert",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967277,
                              4294967277
                            ],
                            "referencedDeclaration": 4294967277,
                            "src": "14397:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (string memory) pure"
                            }
                          },
                          "id": 1255,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14397:53:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1256,
                        "nodeType": "ExpressionStatement",
                        "src": "14397:53:1"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1260
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1260,
                      "mutability": "mutable",
                      "name": "claimIndex",
                      "nameLocation": "14476:10:1",
                      "nodeType": "VariableDeclaration",
                      "scope": 1348,
                      "src": "14471:15:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1259,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "14471:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1262,
                  "initialValue": {
                    "hexValue": "30",
                    "id": 1261,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "14489:1:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14471:19:1"
                },
                {
                  "body": {
                    "id": 1276,
                    "nodeType": "Block",
                    "src": "14570:37:1",
                    "statements": [
                      {
                        "expression": {
                          "id": 1274,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "14584:12:1",
                          "subExpression": {
                            "id": 1273,
                            "name": "claimIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1260,
                            "src": "14584:10:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1275,
                        "nodeType": "ExpressionStatement",
                        "src": "14584:12:1"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 1272,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 1263,
                          "name": "claimsByTopic",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1775,
                          "src": "14507:13:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_array$_t_bytes32_$dyn_storage_$",
                            "typeString": "mapping(uint256 => bytes32[] storage ref)"
                          }
                        },
                        "id": 1268,
                        "indexExpression": {
                          "expression": {
                            "baseExpression": {
                              "id": 1264,
                              "name": "claims",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1770,
                              "src": "14521:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Claim_$1810_storage_$",
                                "typeString": "mapping(bytes32 => struct Structs.Claim storage ref)"
                              }
                            },
                            "id": 1266,
                            "indexExpression": {
                              "id": 1265,
                              "name": "_claimId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1216,
                              "src": "14528:8:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "14521:16:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Claim_$1810_storage",
                              "typeString": "struct Structs.Claim storage ref"
                            }
                          },
                          "id": 1267,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "14538:5:1",
                          "memberName": "topic",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1799,
                          "src": "14521:22:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "14507:37:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                          "typeString": "bytes32[] storage ref"
                        }
                      },
                      "id": 1270,
                      "indexExpression": {
                        "id": 1269,
                        "name": "claimIndex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1260,
                        "src": "14545:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "14507:49:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "id": 1271,
                      "name": "_claimId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1216,
                      "src": "14560:8:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "14507:61:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1277,
                  "nodeType": "WhileStatement",
                  "src": "14500:107:1"
                },
                {
                  "expression": {
                    "id": 1302,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 1278,
                          "name": "claimsByTopic",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1775,
                          "src": "14617:13:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_array$_t_bytes32_$dyn_storage_$",
                            "typeString": "mapping(uint256 => bytes32[] storage ref)"
                          }
                        },
                        "id": 1284,
                        "indexExpression": {
                          "expression": {
                            "baseExpression": {
                              "id": 1279,
                              "name": "claims",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1770,
                              "src": "14631:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Claim_$1810_storage_$",
                                "typeString": "mapping(bytes32 => struct Structs.Claim storage ref)"
                              }
                            },
                            "id": 1281,
                            "indexExpression": {
                              "id": 1280,
                              "name": "_claimId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1216,
                              "src": "14638:8:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "14631:16:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Claim_$1810_storage",
                              "typeString": "struct Structs.Claim storage ref"
                            }
                          },
                          "id": 1282,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "14648:5:1",
                          "memberName": "topic",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1799,
                          "src": "14631:22:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "14617:37:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                          "typeString": "bytes32[] storage ref"
                        }
                      },
                      "id": 1285,
                      "indexExpression": {
                        "id": 1283,
                        "name": "claimIndex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1260,
                        "src": "14655:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "14617:49:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 1286,
                          "name": "claimsByTopic",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1775,
                          "src": "14669:13:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_array$_t_bytes32_$dyn_storage_$",
                            "typeString": "mapping(uint256 => bytes32[] storage ref)"
                          }
                        },
                        "id": 1291,
                        "indexExpression": {
                          "expression": {
                            "baseExpression": {
                              "id": 1287,
                              "name": "claims",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1770,
                              "src": "14683:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Claim_$1810_storage_$",
                                "typeString": "mapping(bytes32 => struct Structs.Claim storage ref)"
                              }
                            },
                            "id": 1289,
                            "indexExpression": {
                              "id": 1288,
                              "name": "_claimId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1216,
                              "src": "14690:8:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "14683:16:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Claim_$1810_storage",
                              "typeString": "struct Structs.Claim storage ref"
                            }
                          },
                          "id": 1290,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "14700:5:1",
                          "memberName": "topic",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1799,
                          "src": "14683:22:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "14669:37:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                          "typeString": "bytes32[] storage ref"
                        }
                      },
                      "id": 1301,
                      "indexExpression": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1300,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "baseExpression": {
                              "id": 1292,
                              "name": "claimsByTopic",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1775,
                              "src": "14707:13:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_array$_t_bytes32_$dyn_storage_$",
                                "typeString": "mapping(uint256 => bytes32[] storage ref)"
                              }
                            },
                            "id": 1297,
                            "indexExpression": {
                              "expression": {
                                "baseExpression": {
                                  "id": 1293,
                                  "name": "claims",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1770,
                                  "src": "14721:6:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Claim_$1810_storage_$",
                                    "typeString": "mapping(bytes32 => struct Structs.Claim storage ref)"
                                  }
                                },
                                "id": 1295,
                                "indexExpression": {
                                  "id": 1294,
                                  "name": "_claimId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1216,
                                  "src": "14728:8:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "14721:16:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Claim_$1810_storage",
                                  "typeString": "struct Structs.Claim storage ref"
                                }
                              },
                              "id": 1296,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "14738:5:1",
                              "memberName": "topic",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1799,
                              "src": "14721:22:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "14707:37:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                              "typeString": "bytes32[] storage ref"
                            }
                          },
                          "id": 1298,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "14745:6:1",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "14707:44:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "hexValue": "31",
                          "id": 1299,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14754:1:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "14707:48:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "14669:87:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "14617:139:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 1303,
                  "nodeType": "ExpressionStatement",
                  "src": "14617:139:1"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "baseExpression": {
                          "id": 1304,
                          "name": "claimsByTopic",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1775,
                          "src": "14766:13:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_array$_t_bytes32_$dyn_storage_$",
                            "typeString": "mapping(uint256 => bytes32[] storage ref)"
                          }
                        },
                        "id": 1309,
                        "indexExpression": {
                          "expression": {
                            "baseExpression": {
                              "id": 1305,
                              "name": "claims",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1770,
                              "src": "14780:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Claim_$1810_storage_$",
                                "typeString": "mapping(bytes32 => struct Structs.Claim storage ref)"
                              }
                            },
                            "id": 1307,
                            "indexExpression": {
                              "id": 1306,
                              "name": "_claimId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1216,
                              "src": "14787:8:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "14780:16:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Claim_$1810_storage",
                              "typeString": "struct Structs.Claim storage ref"
                            }
                          },
                          "id": 1308,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "14797:5:1",
                          "memberName": "topic",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1799,
                          "src": "14780:22:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "14766:37:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                          "typeString": "bytes32[] storage ref"
                        }
                      },
                      "id": 1310,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "14804:3:1",
                      "memberName": "pop",
                      "nodeType": "MemberAccess",
                      "src": "14766:41:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypop_nonpayable$_t_array$_t_bytes32_$dyn_storage_ptr_$returns$__$bound_to$_t_array$_t_bytes32_$dyn_storage_ptr_$",
                        "typeString": "function (bytes32[] storage pointer)"
                      }
                    },
                    "id": 1311,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14766:43:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1312,
                  "nodeType": "ExpressionStatement",
                  "src": "14766:43:1"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 1314,
                        "name": "_claimId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1216,
                        "src": "14851:8:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 1315,
                            "name": "claims",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1770,
                            "src": "14873:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Claim_$1810_storage_$",
                              "typeString": "mapping(bytes32 => struct Structs.Claim storage ref)"
                            }
                          },
                          "id": 1317,
                          "indexExpression": {
                            "id": 1316,
                            "name": "_claimId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1216,
                            "src": "14880:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "14873:16:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Claim_$1810_storage",
                            "typeString": "struct Structs.Claim storage ref"
                          }
                        },
                        "id": 1318,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "14890:5:1",
                        "memberName": "topic",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1799,
                        "src": "14873:22:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 1319,
                            "name": "claims",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1770,
                            "src": "14909:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Claim_$1810_storage_$",
                              "typeString": "mapping(bytes32 => struct Structs.Claim storage ref)"
                            }
                          },
                          "id": 1321,
                          "indexExpression": {
                            "id": 1320,
                            "name": "_claimId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1216,
                            "src": "14916:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "14909:16:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Claim_$1810_storage",
                            "typeString": "struct Structs.Claim storage ref"
                          }
                        },
                        "id": 1322,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "14926:6:1",
                        "memberName": "scheme",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1801,
                        "src": "14909:23:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 1323,
                            "name": "claims",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1770,
                            "src": "14946:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Claim_$1810_storage_$",
                              "typeString": "mapping(bytes32 => struct Structs.Claim storage ref)"
                            }
                          },
                          "id": 1325,
                          "indexExpression": {
                            "id": 1324,
                            "name": "_claimId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1216,
                            "src": "14953:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "14946:16:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Claim_$1810_storage",
                            "typeString": "struct Structs.Claim storage ref"
                          }
                        },
                        "id": 1326,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "14963:6:1",
                        "memberName": "issuer",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1803,
                        "src": "14946:23:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 1327,
                            "name": "claims",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1770,
                            "src": "14983:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Claim_$1810_storage_$",
                              "typeString": "mapping(bytes32 => struct Structs.Claim storage ref)"
                            }
                          },
                          "id": 1329,
                          "indexExpression": {
                            "id": 1328,
                            "name": "_claimId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1216,
                            "src": "14990:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "14983:16:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Claim_$1810_storage",
                            "typeString": "struct Structs.Claim storage ref"
                          }
                        },
                        "id": 1330,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "15000:9:1",
                        "memberName": "signature",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1805,
                        "src": "14983:26:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage",
                          "typeString": "bytes storage ref"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 1331,
                            "name": "claims",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1770,
                            "src": "15023:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Claim_$1810_storage_$",
                              "typeString": "mapping(bytes32 => struct Structs.Claim storage ref)"
                            }
                          },
                          "id": 1333,
                          "indexExpression": {
                            "id": 1332,
                            "name": "_claimId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1216,
                            "src": "15030:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "15023:16:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Claim_$1810_storage",
                            "typeString": "struct Structs.Claim storage ref"
                          }
                        },
                        "id": 1334,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "15040:4:1",
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1807,
                        "src": "15023:21:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage",
                          "typeString": "bytes storage ref"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 1335,
                            "name": "claims",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1770,
                            "src": "15058:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Claim_$1810_storage_$",
                              "typeString": "mapping(bytes32 => struct Structs.Claim storage ref)"
                            }
                          },
                          "id": 1337,
                          "indexExpression": {
                            "id": 1336,
                            "name": "_claimId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1216,
                            "src": "15065:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "15058:16:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Claim_$1810_storage",
                            "typeString": "struct Structs.Claim storage ref"
                          }
                        },
                        "id": 1338,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "15075:3:1",
                        "memberName": "uri",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1809,
                        "src": "15058:20:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_storage",
                          "typeString": "bytes storage ref"
                        },
                        {
                          "typeIdentifier": "t_bytes_storage",
                          "typeString": "bytes storage ref"
                        },
                        {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        }
                      ],
                      "id": 1313,
                      "name": "ClaimRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1663,
                      "src": "14825:12:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint256_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bytes32,uint256,uint256,address,bytes memory,bytes memory,string memory)"
                      }
                    },
                    "id": 1339,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14825:263:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1340,
                  "nodeType": "EmitStatement",
                  "src": "14820:268:1"
                },
                {
                  "expression": {
                    "id": 1344,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "15099:23:1",
                    "subExpression": {
                      "baseExpression": {
                        "id": 1341,
                        "name": "claims",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1770,
                        "src": "15106:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Claim_$1810_storage_$",
                          "typeString": "mapping(bytes32 => struct Structs.Claim storage ref)"
                        }
                      },
                      "id": 1343,
                      "indexExpression": {
                        "id": 1342,
                        "name": "_claimId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1216,
                        "src": "15113:8:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "15106:16:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Claim_$1810_storage",
                        "typeString": "struct Structs.Claim storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1345,
                  "nodeType": "ExpressionStatement",
                  "src": "15099:23:1"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 1346,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "15140:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 1223,
                  "id": 1347,
                  "nodeType": "Return",
                  "src": "15133:11:1"
                }
              ]
            },
            "documentation": {
              "id": 1214,
              "nodeType": "StructuredDocumentation",
              "src": "13645:423:1",
              "text": " @notice Implementation of the removeClaim function from the ERC-735 standard\n Require that the msg.sender has management key.\n Can only be removed by the claim issuer, or the claim holder itself.\n @param _claimId The identity of the claim i.e. keccak256(abi.encode(_issuer, _topic))\n @return success Returns TRUE when the claim was removed.\n triggers ClaimRemoved event"
            },
            "functionSelector": "4eee424a",
            "id": 1349,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 1219,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 1218,
                  "name": "delegatedOnly",
                  "nameLocations": [
                    "14119:13:1"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 294,
                  "src": "14119:13:1"
                },
                "nodeType": "ModifierInvocation",
                "src": "14119:13:1"
              }
            ],
            "name": "removeClaim",
            "nameLocation": "14082:11:1",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1220,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "14133:8:1"
            },
            "parameters": {
              "id": 1217,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1216,
                  "mutability": "mutable",
                  "name": "_claimId",
                  "nameLocation": "14102:8:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 1349,
                  "src": "14094:16:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1215,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "14094:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14093:18:1"
            },
            "returnParameters": {
              "id": 1223,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1222,
                  "mutability": "mutable",
                  "name": "success",
                  "nameLocation": "14156:7:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 1349,
                  "src": "14151:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1221,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "14151:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14150:14:1"
            },
            "scope": 1411,
            "src": "14073:1078:1",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              1698
            ],
            "body": {
              "id": 1394,
              "nodeType": "Block",
              "src": "16418:253:1",
              "statements": [
                {
                  "expression": {
                    "components": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 1368,
                            "name": "claims",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1770,
                            "src": "16449:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Claim_$1810_storage_$",
                              "typeString": "mapping(bytes32 => struct Structs.Claim storage ref)"
                            }
                          },
                          "id": 1370,
                          "indexExpression": {
                            "id": 1369,
                            "name": "_claimId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1352,
                            "src": "16456:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "16449:16:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Claim_$1810_storage",
                            "typeString": "struct Structs.Claim storage ref"
                          }
                        },
                        "id": 1371,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "16466:5:1",
                        "memberName": "topic",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1799,
                        "src": "16449:22:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 1372,
                            "name": "claims",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1770,
                            "src": "16485:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Claim_$1810_storage_$",
                              "typeString": "mapping(bytes32 => struct Structs.Claim storage ref)"
                            }
                          },
                          "id": 1374,
                          "indexExpression": {
                            "id": 1373,
                            "name": "_claimId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1352,
                            "src": "16492:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "16485:16:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Claim_$1810_storage",
                            "typeString": "struct Structs.Claim storage ref"
                          }
                        },
                        "id": 1375,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "16502:6:1",
                        "memberName": "scheme",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1801,
                        "src": "16485:23:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 1376,
                            "name": "claims",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1770,
                            "src": "16522:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Claim_$1810_storage_$",
                              "typeString": "mapping(bytes32 => struct Structs.Claim storage ref)"
                            }
                          },
                          "id": 1378,
                          "indexExpression": {
                            "id": 1377,
                            "name": "_claimId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1352,
                            "src": "16529:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "16522:16:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Claim_$1810_storage",
                            "typeString": "struct Structs.Claim storage ref"
                          }
                        },
                        "id": 1379,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "16539:6:1",
                        "memberName": "issuer",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1803,
                        "src": "16522:23:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 1380,
                            "name": "claims",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1770,
                            "src": "16559:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Claim_$1810_storage_$",
                              "typeString": "mapping(bytes32 => struct Structs.Claim storage ref)"
                            }
                          },
                          "id": 1382,
                          "indexExpression": {
                            "id": 1381,
                            "name": "_claimId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1352,
                            "src": "16566:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "16559:16:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Claim_$1810_storage",
                            "typeString": "struct Structs.Claim storage ref"
                          }
                        },
                        "id": 1383,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "16576:9:1",
                        "memberName": "signature",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1805,
                        "src": "16559:26:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage",
                          "typeString": "bytes storage ref"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 1384,
                            "name": "claims",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1770,
                            "src": "16599:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Claim_$1810_storage_$",
                              "typeString": "mapping(bytes32 => struct Structs.Claim storage ref)"
                            }
                          },
                          "id": 1386,
                          "indexExpression": {
                            "id": 1385,
                            "name": "_claimId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1352,
                            "src": "16606:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "16599:16:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Claim_$1810_storage",
                            "typeString": "struct Structs.Claim storage ref"
                          }
                        },
                        "id": 1387,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "16616:4:1",
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1807,
                        "src": "16599:21:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage",
                          "typeString": "bytes storage ref"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 1388,
                            "name": "claims",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1770,
                            "src": "16634:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Claim_$1810_storage_$",
                              "typeString": "mapping(bytes32 => struct Structs.Claim storage ref)"
                            }
                          },
                          "id": 1390,
                          "indexExpression": {
                            "id": 1389,
                            "name": "_claimId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1352,
                            "src": "16641:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "16634:16:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Claim_$1810_storage",
                            "typeString": "struct Structs.Claim storage ref"
                          }
                        },
                        "id": 1391,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "16651:3:1",
                        "memberName": "uri",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1809,
                        "src": "16634:20:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        }
                      }
                    ],
                    "id": 1392,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "16435:229:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_address_$_t_bytes_storage_$_t_bytes_storage_$_t_string_storage_$",
                      "typeString": "tuple(uint256,uint256,address,bytes storage ref,bytes storage ref,string storage ref)"
                    }
                  },
                  "functionReturnParameters": 1367,
                  "id": 1393,
                  "nodeType": "Return",
                  "src": "16428:236:1"
                }
              ]
            },
            "documentation": {
              "id": 1350,
              "nodeType": "StructuredDocumentation",
              "src": "15157:1008:1",
              "text": " @notice Implementation of the getClaim function from the ERC-735 standard.\n @param _claimId The identity of the claim i.e. keccak256(abi.encode(_issuer, _topic))\n @return topic Returns all the parameters of the claim for the specified _claimId (topic, scheme, signature, issuer, data, uri) .\n @return scheme Returns all the parameters of the claim for the specified _claimId (topic, scheme, signature, issuer, data, uri) .\n @return issuer Returns all the parameters of the claim for the specified _claimId (topic, scheme, signature, issuer, data, uri) .\n @return signature Returns all the parameters of the claim for the specified _claimId (topic, scheme, signature, issuer, data, uri) .\n @return data Returns all the parameters of the claim for the specified _claimId (topic, scheme, signature, issuer, data, uri) .\n @return uri Returns all the parameters of the claim for the specified _claimId (topic, scheme, signature, issuer, data, uri) ."
            },
            "functionSelector": "c9100bcb",
            "id": 1395,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getClaim",
            "nameLocation": "16179:8:1",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1354,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "16221:8:1"
            },
            "parameters": {
              "id": 1353,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1352,
                  "mutability": "mutable",
                  "name": "_claimId",
                  "nameLocation": "16196:8:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 1395,
                  "src": "16188:16:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1351,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "16188:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16187:18:1"
            },
            "returnParameters": {
              "id": 1367,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1356,
                  "mutability": "mutable",
                  "name": "topic",
                  "nameLocation": "16268:5:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 1395,
                  "src": "16260:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1355,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16260:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1358,
                  "mutability": "mutable",
                  "name": "scheme",
                  "nameLocation": "16291:6:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 1395,
                  "src": "16283:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1357,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16283:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1360,
                  "mutability": "mutable",
                  "name": "issuer",
                  "nameLocation": "16315:6:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 1395,
                  "src": "16307:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1359,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16307:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1362,
                  "mutability": "mutable",
                  "name": "signature",
                  "nameLocation": "16344:9:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 1395,
                  "src": "16331:22:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1361,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "16331:5:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1364,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "16376:4:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 1395,
                  "src": "16363:17:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1363,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "16363:5:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1366,
                  "mutability": "mutable",
                  "name": "uri",
                  "nameLocation": "16404:3:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 1395,
                  "src": "16390:17:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1365,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "16390:6:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16250:163:1"
            },
            "scope": 1411,
            "src": "16170:501:1",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              1707
            ],
            "body": {
              "id": 1409,
              "nodeType": "Block",
              "src": "17126:45:1",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "id": 1405,
                      "name": "claimsByTopic",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1775,
                      "src": "17143:13:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_array$_t_bytes32_$dyn_storage_$",
                        "typeString": "mapping(uint256 => bytes32[] storage ref)"
                      }
                    },
                    "id": 1407,
                    "indexExpression": {
                      "id": 1406,
                      "name": "_topic",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1398,
                      "src": "17157:6:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "17143:21:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                      "typeString": "bytes32[] storage ref"
                    }
                  },
                  "functionReturnParameters": 1404,
                  "id": 1408,
                  "nodeType": "Return",
                  "src": "17136:28:1"
                }
              ]
            },
            "documentation": {
              "id": 1396,
              "nodeType": "StructuredDocumentation",
              "src": "16677:324:1",
              "text": " @notice Implementation of the getClaimIdsByTopic function from the ERC-735 standard.\n used to get all the claims from the specified topic\n @param _topic The identity of the claim i.e. keccak256(abi.encode(_issuer, _topic))\n @return claimIds Returns an array of claim IDs by topic."
            },
            "functionSelector": "80e9e9e1",
            "id": 1410,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getClaimIdsByTopic",
            "nameLocation": "17015:18:1",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1400,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "17065:8:1"
            },
            "parameters": {
              "id": 1399,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1398,
                  "mutability": "mutable",
                  "name": "_topic",
                  "nameLocation": "17042:6:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 1410,
                  "src": "17034:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1397,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17034:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17033:16:1"
            },
            "returnParameters": {
              "id": 1404,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1403,
                  "mutability": "mutable",
                  "name": "claimIds",
                  "nameLocation": "17112:8:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 1410,
                  "src": "17095:25:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1401,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "17095:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 1402,
                    "nodeType": "ArrayTypeName",
                    "src": "17095:9:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17094:27:1"
            },
            "scope": 1411,
            "src": "17006:165:1",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 1412,
        "src": "435:16738:1",
        "usedErrors": []
      }
    ],
    "src": "36:17138:1"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.17+commit.8df45f5f.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.8",
  "updatedAt": "2022-12-08T12:51:01.288Z",
  "devdoc": {
    "details": "Implementation of the `IERC734` \"KeyHolder\" and the `IERC735` \"ClaimHolder\" interfaces into a common Identity Contract. This implementation has a separate contract were it declares all storage, allowing for it to be used as an upgradable logic contract.",
    "kind": "dev",
    "methods": {
      "addClaim(uint256,uint256,address,bytes,bytes,string)": {
        "params": {
          "_data": "The hash of the claim data, sitting in another location, a bit-mask, call data, or actual data based on the claim scheme.",
          "_issuer": "The issuers identity contract address, or the address used to sign the above signature.",
          "_scheme": "The scheme with which this claim SHOULD be verified or how it should be processed.",
          "_signature": "Signature which is the proof that the claim issuer issued a claim of topic for this identity. it MUST be a signed message of the following structure: keccak256(abi.encode(address identityHolder_address, uint256 _ topic, bytes data))",
          "_topic": "The type of claim",
          "_uri": "The location of the claim, this can be HTTP links, swarm hashes, IPFS hashes, and such."
        },
        "returns": {
          "claimRequestId": "Returns claimRequestId: COULD be send to the approve function, to approve or reject this claim. triggers ClaimAdded event."
        }
      },
      "addKey(bytes32,uint256,uint256)": {
        "params": {
          "_key": "keccak256 representation of an ethereum address",
          "_purpose": "a uint256[] Array of the key types, like 1 = MANAGEMENT, 2 = ACTION, 3 = CLAIM, 4 = ENCRYPTION",
          "_type": "type of key used, which would be a uint256 for different key types. e.g. 1 = ECDSA, 2 = RSA, etc."
        },
        "returns": {
          "success": "Returns TRUE if the addition was successful and FALSE if not"
        }
      },
      "execute(address,uint256,bytes)": {
        "returns": {
          "executionId": "SHOULD be sent to the approve function, to approve or reject this execution."
        }
      },
      "getClaim(bytes32)": {
        "params": {
          "_claimId": "The identity of the claim i.e. keccak256(abi.encode(_issuer, _topic))"
        },
        "returns": {
          "data": "Returns all the parameters of the claim for the specified _claimId (topic, scheme, signature, issuer, data, uri) .",
          "issuer": "Returns all the parameters of the claim for the specified _claimId (topic, scheme, signature, issuer, data, uri) .",
          "scheme": "Returns all the parameters of the claim for the specified _claimId (topic, scheme, signature, issuer, data, uri) .",
          "signature": "Returns all the parameters of the claim for the specified _claimId (topic, scheme, signature, issuer, data, uri) .",
          "topic": "Returns all the parameters of the claim for the specified _claimId (topic, scheme, signature, issuer, data, uri) .",
          "uri": "Returns all the parameters of the claim for the specified _claimId (topic, scheme, signature, issuer, data, uri) ."
        }
      },
      "getClaimIdsByTopic(uint256)": {
        "params": {
          "_topic": "The identity of the claim i.e. keccak256(abi.encode(_issuer, _topic))"
        },
        "returns": {
          "claimIds": "Returns an array of claim IDs by topic."
        }
      },
      "getKey(bytes32)": {
        "params": {
          "_key": "The public key.  for non-hex and long keys, its the Keccak256 hash of the key"
        },
        "returns": {
          "key": "Returns the full key data, if present in the identity.",
          "keyType": "Returns the full key data, if present in the identity.",
          "purposes": "Returns the full key data, if present in the identity."
        }
      },
      "getKeyPurposes(bytes32)": {
        "params": {
          "_key": "The public key.  for non-hex and long keys, its the Keccak256 hash of the key"
        },
        "returns": {
          "_purposes": "Returns the purposes of the specified key"
        }
      },
      "getKeysByPurpose(uint256)": {
        "params": {
          "_purpose": "a uint256[] Array of the key types, like 1 = MANAGEMENT, 2 = ACTION, 3 = CLAIM, 4 = ENCRYPTION"
        },
        "returns": {
          "_keys": "Returns an array of public key bytes32 hold by this identity and having the specified purpose"
        }
      },
      "initialize(address)": {
        "params": {
          "initialManagementKey": "The ethereum address to be set as the management key of the ONCHAINID."
        }
      },
      "removeClaim(bytes32)": {
        "params": {
          "_claimId": "The identity of the claim i.e. keccak256(abi.encode(_issuer, _topic))"
        },
        "returns": {
          "success": "Returns TRUE when the claim was removed. triggers ClaimRemoved event"
        }
      },
      "version()": {
        "details": "Returns the string of the current version."
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "addClaim(uint256,uint256,address,bytes,bytes,string)": {
        "notice": "Implementation of the addClaim function from the ERC-735 standard  Require that the msg.sender has claim signer key."
      },
      "addKey(bytes32,uint256,uint256)": {
        "notice": "implementation of the addKey function of the ERC-734 standard Adds a _key to the identity. The _purpose specifies the purpose of key. Initially we propose four purposes: 1: MANAGEMENT keys, which can manage the identity 2: ACTION keys, which perform actions in this identities name (signing, logins, transactions, etc.) 3: CLAIM signer keys, used to sign claims on other identities which need to be revokable. 4: ENCRYPTION keys, used to encrypt data e.g. hold in claims. MUST only be done by keys of purpose 1, or the identity itself. If its the identity itself, the approval process will determine its approval."
      },
      "approve(uint256,bool)": {
        "notice": "Approves an execution or claim addition. This SHOULD require n of m approvals of keys purpose 1, if the _to of the execution is the identity contract itself, to successfully approve an execution. And COULD require n of m approvals of keys purpose 2, if the _to of the execution is another contract, to successfully approve an execution."
      },
      "execute(address,uint256,bytes)": {
        "notice": "Passes an execution instruction to the keymanager. SHOULD require approve to be called with one or more keys of purpose 1 or 2 to approve this execution. Execute COULD be used as the only accessor for addKey, removeKey and replaceKey and removeClaim."
      },
      "getClaim(bytes32)": {
        "notice": "Implementation of the getClaim function from the ERC-735 standard."
      },
      "getClaimIdsByTopic(uint256)": {
        "notice": "Implementation of the getClaimIdsByTopic function from the ERC-735 standard. used to get all the claims from the specified topic"
      },
      "getKey(bytes32)": {
        "notice": "Implementation of the getKey function from the ERC-734 standard"
      },
      "getKeyPurposes(bytes32)": {
        "notice": "gets the purposes of a key"
      },
      "getKeysByPurpose(uint256)": {
        "notice": "gets all the keys with a specific purpose from an identity"
      },
      "initialize(address)": {
        "notice": "When using this contract as an implementation for a proxy, call this initializer with a delegatecall."
      },
      "keyHasPurpose(bytes32,uint256)": {
        "notice": "Returns true if the key has MANAGEMENT purpose or the specified purpose."
      },
      "removeClaim(bytes32)": {
        "notice": "Implementation of the removeClaim function from the ERC-735 standard Require that the msg.sender has management key. Can only be removed by the claim issuer, or the claim holder itself."
      },
      "removeKey(bytes32,uint256)": {
        "notice": "Remove the purpose from a key."
      }
    },
    "version": 1
  }
}