{
  "contractName": "CertifiedEmail",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "userContract",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "deliveryType",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "id",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "userSmartContract",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "subjectHash",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "bodyHash",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "createdAt",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "certificatesId",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "deployer",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "signaturit",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "name": "certifiedEmailId",
          "type": "string"
        },
        {
          "name": "certifiedEmailSubjectHash",
          "type": "string"
        },
        {
          "name": "certifiedEmailBodyHash",
          "type": "string"
        },
        {
          "name": "certifiedEmailDeliveryType",
          "type": "string"
        },
        {
          "name": "certifiedEmailCreatedAt",
          "type": "uint256"
        },
        {
          "name": "certifiedEmailDeployer",
          "type": "address"
        },
        {
          "name": "certifiedEmailOwner",
          "type": "address"
        },
        {
          "name": "userSmartContractAddress",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "notifyCreation",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "certificateId",
          "type": "string"
        },
        {
          "name": "certificateCreatedAt",
          "type": "uint256"
        },
        {
          "name": "certificateOwner",
          "type": "address"
        }
      ],
      "name": "createCertificate",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "certificateId",
          "type": "string"
        },
        {
          "name": "eventId",
          "type": "string"
        },
        {
          "name": "eventType",
          "type": "string"
        },
        {
          "name": "eventUserAgent",
          "type": "string"
        },
        {
          "name": "eventCreatedAt",
          "type": "uint256"
        }
      ],
      "name": "createEvent",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "certificateId",
          "type": "string"
        },
        {
          "name": "fileHash",
          "type": "string"
        },
        {
          "name": "fileId",
          "type": "string"
        },
        {
          "name": "fileName",
          "type": "string"
        },
        {
          "name": "fileCreatedAt",
          "type": "uint256"
        },
        {
          "name": "fileSize",
          "type": "uint256"
        }
      ],
      "name": "createFile",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "certificateId",
          "type": "string"
        }
      ],
      "name": "getCertificate",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "getCertificateByIndex",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "certificateId",
          "type": "string"
        },
        {
          "name": "eventId",
          "type": "string"
        }
      ],
      "name": "getEvent",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "certificateId",
          "type": "string"
        }
      ],
      "name": "getFile",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getCertificatesSize",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "notifiersKey",
          "type": "string"
        },
        {
          "name": "createdEvent",
          "type": "string"
        },
        {
          "name": "adrToNotify",
          "type": "address"
        }
      ],
      "name": "notifyEntityEvent",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b50604051620026503803806200265083398101806040526101008110156200003857600080fd5b8101908080516401000000008111156200005157600080fd5b820160208101848111156200006557600080fd5b81516401000000008111828201871017156200008057600080fd5b505092919060200180516401000000008111156200009d57600080fd5b82016020810184811115620000b157600080fd5b8151640100000000811182820187101715620000cc57600080fd5b50509291906020018051640100000000811115620000e957600080fd5b82016020810184811115620000fd57600080fd5b81516401000000008111828201871017156200011857600080fd5b505092919060200180516401000000008111156200013557600080fd5b820160208101848111156200014957600080fd5b81516401000000008111828201871017156200016457600080fd5b5050602080830151604084015160608501516080909501518a51949750919550939290916200019991600e918b019062000234565b508651620001af90600f9060208a019062000234565b508551620001c590601090602089019062000234565b508451620001db90601190602088019062000234565b50601393909355600c8054600160a060020a03938416600160a060020a031991821617909155600b8054821633179055600d8054928416928216929092179091556014805492909316911617905550620002d992505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200027757805160ff1916838001178555620002a7565b82800160010185558215620002a7579182015b82811115620002a75782518255916020019190600101906200028a565b50620002b5929150620002b9565b5090565b620002d691905b80821115620002b55760008155600101620002c0565b90565b61236780620002e96000396000f3fe6080604052600436106101035763ffffffff60e060020a6000350416630a28e90c81146101085780635000596b1461014e57806354715390146101635780637f2e5806146103aa5780638da5cb5b146103d157806391eea19d146103e6578063af640d0f14610470578063b38f8f5714610485578063bdcf5b8e14610544578063c004240c14610786578063c1a911841461079b578063c918ef38146107b0578063ce57b4a0146108e6578063cf09e0d0146108fb578063d30f0dac14610910578063d5f394881461093a578063dbe13ef21461094f578063e0876aa814610a90578063e2b4cf4c14610b41578063ed0f2e7514610b56578063f9b5333514610c07575b600080fd5b34801561011457600080fd5b506101326004803603602081101561012b57600080fd5b5035610c1c565b60408051600160a060020a039092168252519081900360200190f35b34801561015a57600080fd5b50610132610cd0565b34801561016f57600080fd5b506103a8600480360360c081101561018657600080fd5b810190602081018135602060020a8111156101a057600080fd5b8201836020820111156101b257600080fd5b803590602001918460018302840111602060020a831117156101d357600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050602060020a81111561022557600080fd5b82018360208201111561023757600080fd5b803590602001918460018302840111602060020a8311171561025857600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050602060020a8111156102aa57600080fd5b8201836020820111156102bc57600080fd5b803590602001918460018302840111602060020a831117156102dd57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050602060020a81111561032f57600080fd5b82018360208201111561034157600080fd5b803590602001918460018302840111602060020a8311171561036257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505082359350505060200135610cdf565b005b3480156103b657600080fd5b506103bf611043565b60408051918252519081900360200190f35b3480156103dd57600080fd5b5061013261104a565b3480156103f257600080fd5b506103fb611059565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561043557818101518382015260200161041d565b50505050905090810190601f1680156104625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561047c57600080fd5b506103fb6110e7565b34801561049157600080fd5b506103a8600480360360608110156104a857600080fd5b810190602081018135602060020a8111156104c257600080fd5b8201836020820111156104d457600080fd5b803590602001918460018302840111602060020a831117156104f557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505082359350505060200135600160a060020a0316611142565b34801561055057600080fd5b506103a8600480360360a081101561056757600080fd5b810190602081018135602060020a81111561058157600080fd5b82018360208201111561059357600080fd5b803590602001918460018302840111602060020a831117156105b457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050602060020a81111561060657600080fd5b82018360208201111561061857600080fd5b803590602001918460018302840111602060020a8311171561063957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050602060020a81111561068b57600080fd5b82018360208201111561069d57600080fd5b803590602001918460018302840111602060020a831117156106be57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050602060020a81111561071057600080fd5b82018360208201111561072257600080fd5b803590602001918460018302840111602060020a8311171561074357600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050913592506112ec915050565b34801561079257600080fd5b506101326116bb565b3480156107a757600080fd5b506103fb6116ca565b3480156107bc57600080fd5b50610132600480360360408110156107d357600080fd5b810190602081018135602060020a8111156107ed57600080fd5b8201836020820111156107ff57600080fd5b803590602001918460018302840111602060020a8311171561082057600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050602060020a81111561087257600080fd5b82018360208201111561088457600080fd5b803590602001918460018302840111602060020a831117156108a557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611725945050505050565b3480156108f257600080fd5b506103fb611898565b34801561090757600080fd5b506103bf6118f3565b34801561091c57600080fd5b506103fb6004803603602081101561093357600080fd5b50356118f9565b34801561094657600080fd5b5061013261196d565b34801561095b57600080fd5b506103a86004803603606081101561097257600080fd5b810190602081018135602060020a81111561098c57600080fd5b82018360208201111561099e57600080fd5b803590602001918460018302840111602060020a831117156109bf57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050602060020a811115610a1157600080fd5b820183602082011115610a2357600080fd5b803590602001918460018302840111602060020a83111715610a4457600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050509035600160a060020a0316915061197c9050565b348015610a9c57600080fd5b5061013260048036036020811015610ab357600080fd5b810190602081018135602060020a811115610acd57600080fd5b820183602082011115610adf57600080fd5b803590602001918460018302840111602060020a83111715610b0057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611c3c945050505050565b348015610b4d57600080fd5b506103a8611d3c565b348015610b6257600080fd5b5061013260048036036020811015610b7957600080fd5b810190602081018135602060020a811115610b9357600080fd5b820183602082011115610ba557600080fd5b803590602001918460018302840111602060020a83111715610bc657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611e17945050505050565b348015610c1357600080fd5b50610132611e9f565b60125460009060001901821115610c3557506000610ccb565b6015601283815481101515610c4657fe5b906000526020600020016040518082805460018160011615610100020316600290048015610cab5780601f10610c89576101008083540402835291820191610cab565b820191906000526020600020905b815481529060010190602001808311610c97575b5050928352505060405190819003602001902054600160a060020a031690505b919050565b601454600160a060020a031681565b600b54600160a060020a03163214610d43576040805160e560020a62461bcd02815260206004820152602f602482015260008051602061231c83398151915260448201526000805160206122fc833981519152606482015290519081900360840190fd5b6000610d4e87611eae565b905080600160a060020a0316636bee1e1b87878787876040518663ffffffff1660e060020a02815260040180806020018060200180602001868152602001858152602001848103845289818151815260200191508051906020019080838360005b83811015610dc7578181015183820152602001610daf565b50505050905090810190601f168015610df45780820380516001836020036101000a031916815260200191505b5084810383528851815288516020918201918a019080838360005b83811015610e27578181015183820152602001610e0f565b50505050905090810190601f168015610e545780820380516001836020036101000a031916815260200191505b50848103825287518152875160209182019189019080838360005b83811015610e87578181015183820152602001610e6f565b50505050905090810190601f168015610eb45780820380516001836020036101000a031916815260200191505b5098505050505050505050600060405180830381600087803b158015610ed957600080fd5b505af1158015610eed573d6000803e3d6000fd5b50505050600081600160a060020a0316638525855d6040518163ffffffff1660e060020a02815260040160206040518083038186803b158015610f2f57600080fd5b505afa158015610f43573d6000803e3d6000fd5b505050506040513d6020811015610f5957600080fd5b50519050600160a060020a0381161515610fd5576040805160e560020a62461bcd02815260206004820152602c60248201527f4572726f72207768696c652072657472696576696e672066696c652066726f6d604482015260a060020a6b20636572746966696361746502606482015290519081900360840190fd5b6110396040805190810160405280600e8152602001609060020a6d66696c652d6e6f7469666965727302815250604080519081016040528060158152602001605a60020a74199a5b194b98dbdb9d1c9858dd0b98dc99585d1959028152508361197c565b5050505050505050565b6012545b90565b600d54600160a060020a031681565b6011805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156110df5780601f106110b4576101008083540402835291602001916110df565b820191906000526020600020905b8154815290600101906020018083116110c257829003601f168201915b505050505081565b600e805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156110df5780601f106110b4576101008083540402835291602001916110df565b600b54600160a060020a031632146111a6576040805160e560020a62461bcd02815260206004820152602f602482015260008051602061231c83398151915260448201526000805160206122fc833981519152606482015290519081900360840190fd5b60006111b184611eae565b905080600160a060020a031663399ae72483856040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050600060405180830381600087803b15801561121657600080fd5b505af115801561122a573d6000803e3d6000fd5b50506012805460018101808355600092909252875191935061127492507fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec344401906020880190612263565b50506112e6604080519081016040528060158152602001605860020a7463657274696669636174652d6e6f74696669657273028152506040805190810160405280601c81526020017f63657274696669636174652e636f6e74726163742e63726561746564000000008152508361197c565b50505050565b600b54600160a060020a03163214611350576040805160e560020a62461bcd02815260206004820152602f602482015260008051602061231c83398151915260448201526000805160206122fc833981519152606482015290519081900360840190fd5b600061135b86611eae565b905080600160a060020a031663de4cd842868686866040518563ffffffff1660e060020a02815260040180806020018060200180602001858152602001848103845288818151815260200191508051906020019080838360005b838110156113cd5781810151838201526020016113b5565b50505050905090810190601f1680156113fa5780820380516001836020036101000a031916815260200191505b50848103835287518152875160209182019189019080838360005b8381101561142d578181015183820152602001611415565b50505050905090810190601f16801561145a5780820380516001836020036101000a031916815260200191505b50848103825286518152865160209182019188019080838360005b8381101561148d578181015183820152602001611475565b50505050905090810190601f1680156114ba5780820380516001836020036101000a031916815260200191505b50975050505050505050600060405180830381600087803b1580156114de57600080fd5b505af11580156114f2573d6000803e3d6000fd5b505060405160e060020a63e190206302815260206004820181815289516024840152895160009550600160a060020a038716945063e1902063938b938392604490920191908501908083838b5b8381101561155757818101518382015260200161153f565b50505050905090810190601f1680156115845780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b1580156115a157600080fd5b505afa1580156115b5573d6000803e3d6000fd5b505050506040513d60208110156115cb57600080fd5b50519050600160a060020a0381161515611648576040805160e560020a62461bcd02815260206004820152602d60248201527f4572726f72207768696c652072657472696576696e67206576656e742066726f6044820152609860020a6c6d20636572746966696361746502606482015290519081900360840190fd5b6116b26040805190810160405280600f8152602001608860020a6e6576656e742d6e6f74696669657273028152506040805190810160405280601681526020017f6576656e742e636f6e74726163742e63726561746564000000000000000000008152508361197c565b50505050505050565b600954600160a060020a031681565b600f805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156110df5780601f106110b4576101008083540402835291602001916110df565b6000611730836121dc565b151561173e57506000611892565b60006015846040518082805190602001908083835b602083106117725780518252601f199092019160209182019101611753565b51815160209384036101000a600019018019909216911617905292019485525060405193849003810184205460e060020a63e190206302855260048501828152885160248701528851600160a060020a039092169563e19020639550899450909283926044909201919085019080838360005b838110156117fd5781810151838201526020016117e5565b50505050905090810190601f16801561182a5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561184757600080fd5b505afa15801561185b573d6000803e3d6000fd5b505050506040513d602081101561187157600080fd5b50519050600160a060020a038116151561188f576000915050611892565b90505b92915050565b6010805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156110df5780601f106110b4576101008083540402835291602001916110df565b60135481565b601280548290811061190757fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152935090918301828280156110df5780601f106110b4576101008083540402835291602001916110df565b600c54600160a060020a031681565b600b54600160a060020a031632146119e0576040805160e560020a62461bcd02815260206004820152602f602482015260008051602061231c83398151915260448201526000805160206122fc833981519152606482015290519081900360840190fd5b6000805b6014546040805160e260020a633ce8989d0281526024810184905260048101918252875160448201528751600160a060020a039093169263f3a262749289928692829160640190602086019080838360005b83811015611a4e578181015183820152602001611a36565b50505050905090810190601f168015611a7b5780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015611a9957600080fd5b505afa158015611aad573d6000803e3d6000fd5b505050506040513d6020811015611ac357600080fd5b50519150600101600160a060020a03821615611c255760408051600160a060020a038581166044830152602482019283528651606483015286519085169287928792829160840190602086019080838360005b83811015611b2e578181015183820152602001611b16565b50505050905090810190601f168015611b5b5780820380516001836020036101000a031916815260200191505b5060408051601f19818403018152918152602082018051600160e060020a031660e160020a63738f32bb0217815290518251929650945084935091508083835b60208310611bba5780518252601f199092019160209182019101611b9b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611c1c576040519150601f19603f3d011682016040523d82523d6000602084013e611c21565b606091505b5050505b600160a060020a03821615156119e4575050505050565b6000611c47826121dc565b1515611c5557506000610ccb565b60006015836040518082805190602001908083835b60208310611c895780518252601f199092019160209182019101611c6a565b51815160209384036101000a60001901801990921691161790529201948552506040805194859003820185205460e060020a638525855d0286529051600160a060020a0390911694638525855d94506004808201945090829003018186803b158015611cf457600080fd5b505afa158015611d08573d6000803e3d6000fd5b505050506040513d6020811015611d1e57600080fd5b50519050600160a060020a0381161515611892576000915050610ccb565b600b54600160a060020a03163214611da0576040805160e560020a62461bcd02815260206004820152602f602482015260008051602061231c83398151915260448201526000805160206122fc833981519152606482015290519081900360840190fd5b611e156040805190810160405280601981526020017f6365727469666965642d656d61696c2d6e6f74696669657273000000000000008152506040805190810160405280602081526020017f6365727469666965645f656d61696c2e636f6e74726163742e637265617465648152503061197c565b565b6000611e22826121dc565b1515611e3057506000610ccb565b6015826040518082805190602001908083835b60208310611e625780518252601f199092019160209182019101611e43565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922054600160a060020a0316949350505050565b600b54600160a060020a031681565b6000611eb9826121dc565b15611f2f576015826040518082805190602001908083835b60208310611ef05780518252601f199092019160209182019101611ed1565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922054600160a060020a03169250610ccb915050565b600c5460408051600160a060020a03909216604483018190526024830191825284516064840152845160009360609387928492829160849091019060208601908083838c5b83811015611f8c578181015183820152602001611f74565b50505050905090810190601f168015611fb95780820380516001836020036101000a031916815260200191505b5060408051601f19818403018152918152602082018051600160e060020a031660e060020a63547952cf0217815290518251929650945084935091508083835b602083106120185780518252601f199092019160209182019101611ff9565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114612078576040519150601f19603f3d011682016040523d82523d6000602084013e61207d565b606091505b50915091508115156120e6576040805160e560020a62461bcd02815260206004820152602160248201527f4572726f72207768696c65206465706c6f79696e672063657274696669636174604482015260f860020a606502606482015290519081900360840190fd5b6120ef8161225c565b6015856040518082805190602001908083835b602083106121215780518252601f199092019160209182019101612102565b51815160209384036101000a600019018019909216911617905292019485525060405193849003810184208054600160a060020a031916600160a060020a0396909616959095179094555050855160159287929182918401908083835b6020831061219d5780518252601f19909201916020918201910161217e565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922054600160a060020a03169695505050505050565b600080600160a060020a03166015836040518082805190602001908083835b6020831061221a5780518252601f1990920191602091820191016121fb565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922054600160a060020a03169290921415949350505050565b6020015190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106122a457805160ff19168380011785556122d1565b828001600101855582156122d1579182015b828111156122d15782518255916020019190600101906122b6565b506122dd9291506122e1565b5090565b61104791905b808211156122dd57600081556001016122e756fe6f726d207468697320616374696f6e00000000000000000000000000000000004f6e6c79205369676e617475726974206163636f756e742063616e2070657266a165627a7a72305820afb1c6b199b978b90ff38c917ced2254f15075dd2554524d0bbb304c1bf648310029",
  "deployedBytecode": "0x6080604052600436106101035763ffffffff60e060020a6000350416630a28e90c81146101085780635000596b1461014e57806354715390146101635780637f2e5806146103aa5780638da5cb5b146103d157806391eea19d146103e6578063af640d0f14610470578063b38f8f5714610485578063bdcf5b8e14610544578063c004240c14610786578063c1a911841461079b578063c918ef38146107b0578063ce57b4a0146108e6578063cf09e0d0146108fb578063d30f0dac14610910578063d5f394881461093a578063dbe13ef21461094f578063e0876aa814610a90578063e2b4cf4c14610b41578063ed0f2e7514610b56578063f9b5333514610c07575b600080fd5b34801561011457600080fd5b506101326004803603602081101561012b57600080fd5b5035610c1c565b60408051600160a060020a039092168252519081900360200190f35b34801561015a57600080fd5b50610132610cd0565b34801561016f57600080fd5b506103a8600480360360c081101561018657600080fd5b810190602081018135602060020a8111156101a057600080fd5b8201836020820111156101b257600080fd5b803590602001918460018302840111602060020a831117156101d357600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050602060020a81111561022557600080fd5b82018360208201111561023757600080fd5b803590602001918460018302840111602060020a8311171561025857600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050602060020a8111156102aa57600080fd5b8201836020820111156102bc57600080fd5b803590602001918460018302840111602060020a831117156102dd57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050602060020a81111561032f57600080fd5b82018360208201111561034157600080fd5b803590602001918460018302840111602060020a8311171561036257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505082359350505060200135610cdf565b005b3480156103b657600080fd5b506103bf611043565b60408051918252519081900360200190f35b3480156103dd57600080fd5b5061013261104a565b3480156103f257600080fd5b506103fb611059565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561043557818101518382015260200161041d565b50505050905090810190601f1680156104625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561047c57600080fd5b506103fb6110e7565b34801561049157600080fd5b506103a8600480360360608110156104a857600080fd5b810190602081018135602060020a8111156104c257600080fd5b8201836020820111156104d457600080fd5b803590602001918460018302840111602060020a831117156104f557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505082359350505060200135600160a060020a0316611142565b34801561055057600080fd5b506103a8600480360360a081101561056757600080fd5b810190602081018135602060020a81111561058157600080fd5b82018360208201111561059357600080fd5b803590602001918460018302840111602060020a831117156105b457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050602060020a81111561060657600080fd5b82018360208201111561061857600080fd5b803590602001918460018302840111602060020a8311171561063957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050602060020a81111561068b57600080fd5b82018360208201111561069d57600080fd5b803590602001918460018302840111602060020a831117156106be57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050602060020a81111561071057600080fd5b82018360208201111561072257600080fd5b803590602001918460018302840111602060020a8311171561074357600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050913592506112ec915050565b34801561079257600080fd5b506101326116bb565b3480156107a757600080fd5b506103fb6116ca565b3480156107bc57600080fd5b50610132600480360360408110156107d357600080fd5b810190602081018135602060020a8111156107ed57600080fd5b8201836020820111156107ff57600080fd5b803590602001918460018302840111602060020a8311171561082057600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050602060020a81111561087257600080fd5b82018360208201111561088457600080fd5b803590602001918460018302840111602060020a831117156108a557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611725945050505050565b3480156108f257600080fd5b506103fb611898565b34801561090757600080fd5b506103bf6118f3565b34801561091c57600080fd5b506103fb6004803603602081101561093357600080fd5b50356118f9565b34801561094657600080fd5b5061013261196d565b34801561095b57600080fd5b506103a86004803603606081101561097257600080fd5b810190602081018135602060020a81111561098c57600080fd5b82018360208201111561099e57600080fd5b803590602001918460018302840111602060020a831117156109bf57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050602060020a811115610a1157600080fd5b820183602082011115610a2357600080fd5b803590602001918460018302840111602060020a83111715610a4457600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050509035600160a060020a0316915061197c9050565b348015610a9c57600080fd5b5061013260048036036020811015610ab357600080fd5b810190602081018135602060020a811115610acd57600080fd5b820183602082011115610adf57600080fd5b803590602001918460018302840111602060020a83111715610b0057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611c3c945050505050565b348015610b4d57600080fd5b506103a8611d3c565b348015610b6257600080fd5b5061013260048036036020811015610b7957600080fd5b810190602081018135602060020a811115610b9357600080fd5b820183602082011115610ba557600080fd5b803590602001918460018302840111602060020a83111715610bc657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611e17945050505050565b348015610c1357600080fd5b50610132611e9f565b60125460009060001901821115610c3557506000610ccb565b6015601283815481101515610c4657fe5b906000526020600020016040518082805460018160011615610100020316600290048015610cab5780601f10610c89576101008083540402835291820191610cab565b820191906000526020600020905b815481529060010190602001808311610c97575b5050928352505060405190819003602001902054600160a060020a031690505b919050565b601454600160a060020a031681565b600b54600160a060020a03163214610d43576040805160e560020a62461bcd02815260206004820152602f602482015260008051602061231c83398151915260448201526000805160206122fc833981519152606482015290519081900360840190fd5b6000610d4e87611eae565b905080600160a060020a0316636bee1e1b87878787876040518663ffffffff1660e060020a02815260040180806020018060200180602001868152602001858152602001848103845289818151815260200191508051906020019080838360005b83811015610dc7578181015183820152602001610daf565b50505050905090810190601f168015610df45780820380516001836020036101000a031916815260200191505b5084810383528851815288516020918201918a019080838360005b83811015610e27578181015183820152602001610e0f565b50505050905090810190601f168015610e545780820380516001836020036101000a031916815260200191505b50848103825287518152875160209182019189019080838360005b83811015610e87578181015183820152602001610e6f565b50505050905090810190601f168015610eb45780820380516001836020036101000a031916815260200191505b5098505050505050505050600060405180830381600087803b158015610ed957600080fd5b505af1158015610eed573d6000803e3d6000fd5b50505050600081600160a060020a0316638525855d6040518163ffffffff1660e060020a02815260040160206040518083038186803b158015610f2f57600080fd5b505afa158015610f43573d6000803e3d6000fd5b505050506040513d6020811015610f5957600080fd5b50519050600160a060020a0381161515610fd5576040805160e560020a62461bcd02815260206004820152602c60248201527f4572726f72207768696c652072657472696576696e672066696c652066726f6d604482015260a060020a6b20636572746966696361746502606482015290519081900360840190fd5b6110396040805190810160405280600e8152602001609060020a6d66696c652d6e6f7469666965727302815250604080519081016040528060158152602001605a60020a74199a5b194b98dbdb9d1c9858dd0b98dc99585d1959028152508361197c565b5050505050505050565b6012545b90565b600d54600160a060020a031681565b6011805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156110df5780601f106110b4576101008083540402835291602001916110df565b820191906000526020600020905b8154815290600101906020018083116110c257829003601f168201915b505050505081565b600e805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156110df5780601f106110b4576101008083540402835291602001916110df565b600b54600160a060020a031632146111a6576040805160e560020a62461bcd02815260206004820152602f602482015260008051602061231c83398151915260448201526000805160206122fc833981519152606482015290519081900360840190fd5b60006111b184611eae565b905080600160a060020a031663399ae72483856040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050600060405180830381600087803b15801561121657600080fd5b505af115801561122a573d6000803e3d6000fd5b50506012805460018101808355600092909252875191935061127492507fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec344401906020880190612263565b50506112e6604080519081016040528060158152602001605860020a7463657274696669636174652d6e6f74696669657273028152506040805190810160405280601c81526020017f63657274696669636174652e636f6e74726163742e63726561746564000000008152508361197c565b50505050565b600b54600160a060020a03163214611350576040805160e560020a62461bcd02815260206004820152602f602482015260008051602061231c83398151915260448201526000805160206122fc833981519152606482015290519081900360840190fd5b600061135b86611eae565b905080600160a060020a031663de4cd842868686866040518563ffffffff1660e060020a02815260040180806020018060200180602001858152602001848103845288818151815260200191508051906020019080838360005b838110156113cd5781810151838201526020016113b5565b50505050905090810190601f1680156113fa5780820380516001836020036101000a031916815260200191505b50848103835287518152875160209182019189019080838360005b8381101561142d578181015183820152602001611415565b50505050905090810190601f16801561145a5780820380516001836020036101000a031916815260200191505b50848103825286518152865160209182019188019080838360005b8381101561148d578181015183820152602001611475565b50505050905090810190601f1680156114ba5780820380516001836020036101000a031916815260200191505b50975050505050505050600060405180830381600087803b1580156114de57600080fd5b505af11580156114f2573d6000803e3d6000fd5b505060405160e060020a63e190206302815260206004820181815289516024840152895160009550600160a060020a038716945063e1902063938b938392604490920191908501908083838b5b8381101561155757818101518382015260200161153f565b50505050905090810190601f1680156115845780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b1580156115a157600080fd5b505afa1580156115b5573d6000803e3d6000fd5b505050506040513d60208110156115cb57600080fd5b50519050600160a060020a0381161515611648576040805160e560020a62461bcd02815260206004820152602d60248201527f4572726f72207768696c652072657472696576696e67206576656e742066726f6044820152609860020a6c6d20636572746966696361746502606482015290519081900360840190fd5b6116b26040805190810160405280600f8152602001608860020a6e6576656e742d6e6f74696669657273028152506040805190810160405280601681526020017f6576656e742e636f6e74726163742e63726561746564000000000000000000008152508361197c565b50505050505050565b600954600160a060020a031681565b600f805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156110df5780601f106110b4576101008083540402835291602001916110df565b6000611730836121dc565b151561173e57506000611892565b60006015846040518082805190602001908083835b602083106117725780518252601f199092019160209182019101611753565b51815160209384036101000a600019018019909216911617905292019485525060405193849003810184205460e060020a63e190206302855260048501828152885160248701528851600160a060020a039092169563e19020639550899450909283926044909201919085019080838360005b838110156117fd5781810151838201526020016117e5565b50505050905090810190601f16801561182a5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561184757600080fd5b505afa15801561185b573d6000803e3d6000fd5b505050506040513d602081101561187157600080fd5b50519050600160a060020a038116151561188f576000915050611892565b90505b92915050565b6010805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156110df5780601f106110b4576101008083540402835291602001916110df565b60135481565b601280548290811061190757fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152935090918301828280156110df5780601f106110b4576101008083540402835291602001916110df565b600c54600160a060020a031681565b600b54600160a060020a031632146119e0576040805160e560020a62461bcd02815260206004820152602f602482015260008051602061231c83398151915260448201526000805160206122fc833981519152606482015290519081900360840190fd5b6000805b6014546040805160e260020a633ce8989d0281526024810184905260048101918252875160448201528751600160a060020a039093169263f3a262749289928692829160640190602086019080838360005b83811015611a4e578181015183820152602001611a36565b50505050905090810190601f168015611a7b5780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015611a9957600080fd5b505afa158015611aad573d6000803e3d6000fd5b505050506040513d6020811015611ac357600080fd5b50519150600101600160a060020a03821615611c255760408051600160a060020a038581166044830152602482019283528651606483015286519085169287928792829160840190602086019080838360005b83811015611b2e578181015183820152602001611b16565b50505050905090810190601f168015611b5b5780820380516001836020036101000a031916815260200191505b5060408051601f19818403018152918152602082018051600160e060020a031660e160020a63738f32bb0217815290518251929650945084935091508083835b60208310611bba5780518252601f199092019160209182019101611b9b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611c1c576040519150601f19603f3d011682016040523d82523d6000602084013e611c21565b606091505b5050505b600160a060020a03821615156119e4575050505050565b6000611c47826121dc565b1515611c5557506000610ccb565b60006015836040518082805190602001908083835b60208310611c895780518252601f199092019160209182019101611c6a565b51815160209384036101000a60001901801990921691161790529201948552506040805194859003820185205460e060020a638525855d0286529051600160a060020a0390911694638525855d94506004808201945090829003018186803b158015611cf457600080fd5b505afa158015611d08573d6000803e3d6000fd5b505050506040513d6020811015611d1e57600080fd5b50519050600160a060020a0381161515611892576000915050610ccb565b600b54600160a060020a03163214611da0576040805160e560020a62461bcd02815260206004820152602f602482015260008051602061231c83398151915260448201526000805160206122fc833981519152606482015290519081900360840190fd5b611e156040805190810160405280601981526020017f6365727469666965642d656d61696c2d6e6f74696669657273000000000000008152506040805190810160405280602081526020017f6365727469666965645f656d61696c2e636f6e74726163742e637265617465648152503061197c565b565b6000611e22826121dc565b1515611e3057506000610ccb565b6015826040518082805190602001908083835b60208310611e625780518252601f199092019160209182019101611e43565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922054600160a060020a0316949350505050565b600b54600160a060020a031681565b6000611eb9826121dc565b15611f2f576015826040518082805190602001908083835b60208310611ef05780518252601f199092019160209182019101611ed1565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922054600160a060020a03169250610ccb915050565b600c5460408051600160a060020a03909216604483018190526024830191825284516064840152845160009360609387928492829160849091019060208601908083838c5b83811015611f8c578181015183820152602001611f74565b50505050905090810190601f168015611fb95780820380516001836020036101000a031916815260200191505b5060408051601f19818403018152918152602082018051600160e060020a031660e060020a63547952cf0217815290518251929650945084935091508083835b602083106120185780518252601f199092019160209182019101611ff9565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114612078576040519150601f19603f3d011682016040523d82523d6000602084013e61207d565b606091505b50915091508115156120e6576040805160e560020a62461bcd02815260206004820152602160248201527f4572726f72207768696c65206465706c6f79696e672063657274696669636174604482015260f860020a606502606482015290519081900360840190fd5b6120ef8161225c565b6015856040518082805190602001908083835b602083106121215780518252601f199092019160209182019101612102565b51815160209384036101000a600019018019909216911617905292019485525060405193849003810184208054600160a060020a031916600160a060020a0396909616959095179094555050855160159287929182918401908083835b6020831061219d5780518252601f19909201916020918201910161217e565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922054600160a060020a03169695505050505050565b600080600160a060020a03166015836040518082805190602001908083835b6020831061221a5780518252601f1990920191602091820191016121fb565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922054600160a060020a03169290921415949350505050565b6020015190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106122a457805160ff19168380011785556122d1565b828001600101855582156122d1579182015b828111156122d15782518255916020019190600101906122b6565b506122dd9291506122e1565b5090565b61104791905b808211156122dd57600081556001016122e756fe6f726d207468697320616374696f6e00000000000000000000000000000000004f6e6c79205369676e617475726974206163636f756e742063616e2070657266a165627a7a72305820afb1c6b199b978b90ff38c917ced2254f15075dd2554524d0bbb304c1bf648310029",
  "sourceMap": "324:7607:2:-;;;1406:782;8:9:-1;5:2;;;30:1;27;20:12;5:2;1406:782:2;;;;;;;;;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;1406:782:2;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;0:372;;1406:782:2;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;0:372;;1406:782:2;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;0:372;;1406:782:2;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;-1:-1;;1406:782:2;;;;;;;;;;;;;;;;;;1783:21;;1406:782;;-1:-1:-1;1406:782:2;;-1:-1:-1;1406:782:2;;;;1783:21;;:2;;:21;;;;:::i;:::-;-1:-1:-1;1814:39:2;;;;:11;;:39;;;;;:::i;:::-;-1:-1:-1;1863:33:2;;;;:8;;:33;;;;;:::i;:::-;-1:-1:-1;1906:41:2;;;;:12;;:41;;;;;:::i;:::-;-1:-1:-1;1957:9:2;:35;;;;2002:8;:33;;-1:-1:-1;;;;;2002:33:2;;;-1:-1:-1;;;;;;2002:33:2;;;;;;;2045:10;:23;;;;2058:10;2045:23;;;2079:5;:27;;;;;;;;;;;;;;;2117:12;:64;;;;;;;;;;;-1:-1:-1;324:7607:2;;-1:-1:-1;;;324:7607:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;324:7607:2;;;-1:-1:-1;324:7607:2;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;",
  "deployedSourceMap": "324:7607:2:-;;;;;;;;;-1:-1:-1;;;324:7607:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4907:250;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4907:250:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4907:250:2;;;;;;;-1:-1:-1;;;;;4907:250:2;;;;;;;;;;;;;;1289:43;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1289:43:2;;;;3850:792;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3850:792:2;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;3850:792:2;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;3850:792:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3850:792:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;3850:792:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;3850:792:2;;;;;;;;-1:-1:-1;3850:792:2;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;3850:792:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3850:792:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;3850:792:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;3850:792:2;;;;;;;;-1:-1:-1;3850:792:2;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;3850:792:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3850:792:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;3850:792:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;3850:792:2;;;;;;;;-1:-1:-1;3850:792:2;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;3850:792:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3850:792:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;3850:792:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;3850:792:2;;-1:-1:-1;;3850:792:2;;;-1:-1:-1;;;3850:792:2;;;;;;;6043:131;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6043:131:2;;;;;;;;;;;;;;;;;;;;1083:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1083:20:2;;;;1191:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1191:26:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1191:26:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1110:16;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1110:16:2;;;;2558:479;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2558:479:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2558:479:2;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;2558:479:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2558:479:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;2558:479:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;2558:479:2;;-1:-1:-1;;2558:479:2;;;-1:-1:-1;;;2558:479:2;;;-1:-1:-1;;;;;2558:479:2;;;3043:801;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3043:801:2;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;3043:801:2;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;3043:801:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3043:801:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;3043:801:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;3043:801:2;;;;;;;;-1:-1:-1;3043:801:2;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;3043:801:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3043:801:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;3043:801:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;3043:801:2;;;;;;;;-1:-1:-1;3043:801:2;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;3043:801:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3043:801:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;3043:801:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;3043:801:2;;;;;;;;-1:-1:-1;3043:801:2;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;3043:801:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3043:801:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;3043:801:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;3043:801:2;;-1:-1:-1;;3043:801:2;;;-1:-1:-1;3043:801:2;;-1:-1:-1;;3043:801:2;440:48:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;440:48:22;;;;1132:25:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1132:25:2;;;;5164:476;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5164:476:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5164:476:2;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;5164:476:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;5164:476:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;5164:476:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;5164:476:2;;;;;;;;-1:-1:-1;5164:476:2;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;5164:476:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;5164:476:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;5164:476:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;5164:476:2;;-1:-1:-1;5164:476:2;;-1:-1:-1;;;;;5164:476:2;1163:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1163:22:2;;;;1261:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1261:21:2;;;;1224:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1224:30:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1224:30:2;;;1054:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1054:23:2;;;;6180:768;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6180:768:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6180:768:2;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;6180:768:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6180:768:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;6180:768:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;6180:768:2;;;;;;;;-1:-1:-1;6180:768:2;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;6180:768:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6180:768:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;6180:768:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;6180:768:2;;-1:-1:-1;;;6180:768:2;;-1:-1:-1;;;;;6180:768:2;;-1:-1:-1;6180:768:2;;-1:-1:-1;6180:768:2;5646:391;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5646:391:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5646:391:2;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;5646:391:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;5646:391:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;5646:391:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;5646:391:2;;-1:-1:-1;5646:391:2;;-1:-1:-1;;;;;5646:391:2;2373:179;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2373:179:2;;;;4648:253;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4648:253:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4648:253:2;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;4648:253:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4648:253:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;4648:253:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;4648:253:2;;-1:-1:-1;4648:253:2;;-1:-1:-1;;;;;4648:253:2;1023:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1023:25:2;;;;4907:250;5044:14;:21;5009:7;;-1:-1:-1;;5044:25:2;5036:33;;5032:56;;;-1:-1:-1;5086:1:2;5071:17;;5032:56;5114:12;5127:14;5142:5;5127:21;;;;;;;;;;;;;;;;;5114:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5114:35:2;;;-1:-1:-1;;5114:35:2;;;;;;;;;;;-1:-1:-1;;;;;5114:35:2;;-1:-1:-1;4907:250:2;;;;:::o;1289:43::-;;;-1:-1:-1;;;;;1289:43:2;;:::o;3850:792::-;2265:10;;-1:-1:-1;;;;;2265:10:2;2252:9;:23;2231:117;;;;;-1:-1:-1;;;;;2231:117:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2231:117:2;;;;-1:-1:-1;;;;;;;;;;;2231:117:2;;;;;;;;;;;;;;;4110:32;4145:30;4161:13;4145:15;:30::i;:::-;4110:65;;4186:11;-1:-1:-1;;;;;4186:22:2;;4222:8;4244:6;4264:8;4286:13;4313:8;4186:145;;;;;-1:-1:-1;;;4186:145:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4186:145:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4186:145:2;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4186:145:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4186:145:2;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4186:145:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4186:145:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4186:145:2;;;;4342:32;4377:11;-1:-1:-1;;;;;4377:16:2;;:18;;;;;-1:-1:-1;;;4377:18:2;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4377:18:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4377:18:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4377:18:2;;-1:-1:-1;;;;;;4427:41:2;;;;4406:132;;;;;-1:-1:-1;;;;;4406:132:2;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4406:132:2;;;;;;;;;;;;;;;4549:86;4567:18;;;;;;;;;;;;;;-1:-1:-1;;;;;4567:18:2;;;4587;;;;;;;;;;;;;;-1:-1:-1;;;;;4587:18:2;;;4615;4549:17;:86::i;:::-;2359:1;;3850:792;;;;;;:::o;6043:131::-;6146:14;:21;6043:131;;:::o;1083:20::-;;;-1:-1:-1;;;;;1083:20:2;;:::o;1191:26::-;;;;;;;;;;;;;;;-1:-1:-1;;1191:26:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1110:16::-;;;;;;;;;;;;;;;-1:-1:-1;;1110:16:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2558:479;2265:10;;-1:-1:-1;;;;;2265:10:2;2252:9;:23;2231:117;;;;;-1:-1:-1;;;;;2231:117:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2231:117:2;;;;-1:-1:-1;;;;;;;;;;;2231:117:2;;;;;;;;;;;;;;;2749:32;2784:30;2800:13;2784:15;:30::i;:::-;2749:65;;2825:11;-1:-1:-1;;;;;2825:16:2;;2842;2860:20;2825:56;;;;;-1:-1:-1;;;2825:56:2;;;;;;;-1:-1:-1;;;;;2825:56:2;-1:-1:-1;;;;;2825:56:2;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2825:56:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;2892:14:2;27:10:-1;;39:1;23:18;;45:23;;;-1:-1;2892:34:2;;;;;;23:18:-1;;-1:-1;2892:34:2;;-1:-1:-1;2892:34:2;;;;;;;;:::i;:::-;;;2937:93;2955:25;;;;;;;;;;;;;;-1:-1:-1;;;;;2955:25:2;;;2982;;;;;;;;;;;;;;;;;;3017:11;2937:17;:93::i;:::-;2359:1;2558:479;;;:::o;3043:801::-;2265:10;;-1:-1:-1;;;;;2265:10:2;2252:9;:23;2231:117;;;;;-1:-1:-1;;;;;2231:117:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2231:117:2;;;;-1:-1:-1;;;;;;;;;;;2231:117:2;;;;;;;;;;;;;;;3290:32;3325:30;3341:13;3325:15;:30::i;:::-;3290:65;;3366:11;-1:-1:-1;;;;;3366:23:2;;3403:7;3424:9;3447:14;3475;3366:133;;;;;-1:-1:-1;;;3366:133:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3366:133:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3366:133:2;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3366:133:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3366:133:2;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3366:133:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3366:133:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;3562:29:2;;-1:-1:-1;;;;;3562:29:2;;;;;;;;;;;;;;;;;3510:34;;-1:-1:-1;;;;;;3562:20:2;;;-1:-1:-1;3562:20:2;;3583:7;;3562:29;;;;;;;;;;;;;;3510:34;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3562:29:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3562:29:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3562:29:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3562:29:2;;-1:-1:-1;;;;;;3624:42:2;;;;3603:134;;;;;-1:-1:-1;;;;;3603:134:2;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3603:134:2;;;;;;;;;;;;;;;3748:89;3766:19;;;;;;;;;;;;;;-1:-1:-1;;;;;3766:19:2;;;3787;;;;;;;;;;;;;;;;;;3816;3748:17;:89::i;:::-;2359:1;;3043:801;;;;;:::o;440:48:22:-;;;-1:-1:-1;;;;;440:48:22;;:::o;1132:25:2:-;;;;;;;;;;;;;;;-1:-1:-1;;1132:25:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5164:476;5301:7;5329:32;5347:13;5329:17;:32::i;:::-;5328:33;5324:56;;;-1:-1:-1;5378:1:2;5363:17;;5324:56;5391:34;5443:12;5456:13;5443:27;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;5443:27:2;;;;;-1:-1:-1;5443:27:2;;;;;;;;;;;-1:-1:-1;;;;;5443:67:2;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5443:27:2;;;;:36;;-1:-1:-1;5443:67:2;;-1:-1:-1;5443:67:2;;;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;5443:67:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5443:67:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5443:67:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5443:67:2;;-1:-1:-1;;;;;;5526:42:2;;;5522:65;;;5585:1;5570:17;;;;;5522:65;5613:19;-1:-1:-1;5164:476:2;;;;;:::o;1163:22::-;;;;;;;;;;;;;;;-1:-1:-1;;1163:22:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1261:21;;;;:::o;1224:30::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1224:30:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1224:30:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1054:23;;;-1:-1:-1;;;;;1054:23:2;;:::o;6180:768::-;2265:10;;-1:-1:-1;;;;;2265:10:2;2252:9;:23;2231:117;;;;;-1:-1:-1;;;;;2231:117:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2231:117:2;;;;-1:-1:-1;;;;;;;;;;;2231:117:2;;;;;;;;;;;;;;;6367:24;;6438:504;6474:12;;:70;;;-1:-1:-1;;;;;6474:70:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6474:12:2;;;;:37;;6512:12;;6526:17;;6474:70;;;;;;;;;;;;:12;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;6474:70:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6474:70:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6474:70:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6474:70:2;;-1:-1:-1;6558:19:2;;-1:-1:-1;;;;;6596:30:2;;;6592:300;;6689:170;;;-1:-1:-1;;;;;6689:170:2;;;;;;;;;;;;;;;;;;;;;6646:21;;;;6788:12;;6826:11;;6689:170;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;6689:170:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6689:170:2;;;-1:-1:-1;;26:21;;;22:32;6:49;;6689:170:2;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;;;179:29;160:49;;6646:231:2;;;;6689:170;;-1:-1:-1;6646:231:2;-1:-1:-1;6646:231:2;;-1:-1:-1;25:18;-1:-1;6646:231:2;;25:18:-1;36:153;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;6646:231:2;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;6646:231:2;;6592:300;-1:-1:-1;;;;;6910:30:2;;;;6438:504;;2359:1;;6180:768;;;:::o;5646:391::-;5751:7;5779:32;5797:13;5779:17;:32::i;:::-;5778:33;5774:56;;;-1:-1:-1;5828:1:2;5813:17;;5774:56;5841:32;5876:12;5889:13;5876:27;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;5876:27:2;;;;;-1:-1:-1;5876:27:2;;;;;;;;;;;;-1:-1:-1;;;;;5876:34:2;;;;-1:-1:-1;;;;;5876:27:2;;;;:32;;-1:-1:-1;5876:34:2;;;;;-1:-1:-1;5876:34:2;;;;;;:27;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;5876:34:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5876:34:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5876:34:2;;-1:-1:-1;;;;;;5925:41:2;;;5921:64;;;5983:1;5968:17;;;;;2373:179;2265:10;;-1:-1:-1;;;;;2265:10:2;2252:9;:23;2231:117;;;;;-1:-1:-1;;;;;2231:117:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2231:117:2;;;;-1:-1:-1;;;;;;;;;;;2231:117:2;;;;;;;;;;;;;;;2451:94;2469:29;;;;;;;;;;;;;;;;;;2500;;;;;;;;;;;;;;;;;;2539:4;2451:17;:94::i;:::-;2373:179::o;4648:253::-;4761:7;4789:32;4807:13;4789:17;:32::i;:::-;4788:33;4784:56;;;-1:-1:-1;4838:1:2;4823:17;;4784:56;4866:12;4879:13;4866:27;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;4866:27:2;;;;;-1:-1:-1;4866:27:2;;;;;;;;;;;-1:-1:-1;;;;;4866:27:2;;4648:253;-1:-1:-1;;;;4648:253:2:o;1023:25::-;;;-1:-1:-1;;;;;1023:25:2;;:::o;7161:768::-;7262:20;7302:32;7320:13;7302:17;:32::i;:::-;7298:84;;;7355:12;7368:13;7355:27;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;7355:27:2;;;;;-1:-1:-1;7355:27:2;;;;;;;;;;;-1:-1:-1;;;;;7355:27:2;;-1:-1:-1;7348:34:2;;-1:-1:-1;;7348:34:2;7298:84;7469:8;;7504:147;;;-1:-1:-1;;;;;7469:8:2;;;7504:147;;;;;;;;;;;;;;;;;;;;7407:12;;7433:23;;7598:13;;7469:8;;7504:147;;;;;;;;;;;;;;7407:12;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;7504:147:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7504:147:2;;;-1:-1:-1;;26:21;;;22:32;6:49;;7504:147:2;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;;;179:29;160:49;;7469:192:2;;;;7504:147;;-1:-1:-1;7469:192:2;-1:-1:-1;7469:192:2;;-1:-1:-1;25:18;-1:-1;7469:192:2;;25:18:-1;36:153;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;7469:192:2;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;7393:268:2;;;;7693:7;7672:87;;;;;;;-1:-1:-1;;;;;7672:87:2;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7672:87:2;;;;;;;;;;;;;;;7834:33;7856:10;7834:21;:33::i;:::-;7770:12;7783:13;7770:27;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;7770:27:2;;;;;-1:-1:-1;7770:27:2;;;;;;;;;;:107;;-1:-1:-1;;;;;;7770:107:2;-1:-1:-1;;;;;7770:107:2;;;;;;;;;;;-1:-1:-1;;7895:27:2;;:12;;:27;;7770;;;7895;;;;7770;7895;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;7895:27:2;;;;;-1:-1:-1;7895:27:2;;;;;;;;;;;-1:-1:-1;;;;;7895:27:2;;7161:768;-1:-1:-1;;;;;;7161:768:2:o;6955:200::-;7071:4;7146:1;-1:-1:-1;;;;;7098:50:2;7106:12;7119:13;7106:27;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;7106:27:2;;;;;-1:-1:-1;7106:27:2;;;;;;;;;;;-1:-1:-1;;;;;7106:27:2;7098:50;;;;;;6955:200;-1:-1:-1;;;;6955:200:2:o;46:290:31:-;259:4;247:17;241:24;;46:290::o;324:7607:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;324:7607:2;;;-1:-1:-1;324:7607:2;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;",
  "source": "pragma solidity <0.6.0;\n\n/*\nGas to deploy: 2.707.646\n*/\n\nimport \"./interfaces/CertifiedEmailInterface.sol\";\nimport \"./interfaces/SignaturitUserInterface.sol\";\nimport \"./interfaces/CertificateInterface.sol\";\nimport \"./interfaces/EventInterface.sol\";\nimport \"./interfaces/FileInterface.sol\";\nimport \"./libraries/Utils.sol\";\n\n\ncontract CertifiedEmail is CertifiedEmailInterface {\n    string constant private CERTIFIED_EMAIL_CREATED_EVENT = \"certified_email.contract.created\";\n    string constant private CERTIFICATE_CREATED_EVENT = \"certificate.contract.created\";\n    string constant private FILE_CREATED_EVENT = \"file.contract.created\";\n    string constant private EVENT_CREATED_EVENT = \"event.contract.created\";\n\n    string constant private CERTIFIED_EMAIL_NOTIFIERS_KEY = \"certified-email-notifiers\";\n    string constant private CERTIFICATE_NOTIFIERS_KEY = \"certificate-notifiers\";\n    string constant private FILE_NOTIFIERS_KEY = \"file-notifiers\";\n    string constant private EVENT_NOTIFIERS_KEY = \"event-notifiers\";\n\n    address public signaturit;\n    address public deployer;\n    address public owner;\n\n    string public id;\n    string public subjectHash;\n    string public bodyHash;\n    string public deliveryType;\n\n    string[] public certificatesId;\n\n    uint public createdAt;\n\n    SignaturitUserInterface public userContract;\n\n    mapping(string => CertificateInterface) private certificates;\n\n    constructor(\n        string memory certifiedEmailId,\n        string memory certifiedEmailSubjectHash,\n        string memory certifiedEmailBodyHash,\n        string memory certifiedEmailDeliveryType,\n        uint certifiedEmailCreatedAt,\n        address certifiedEmailDeployer,\n        address certifiedEmailOwner,\n        address userSmartContractAddress\n    ) public {\n        id = certifiedEmailId;\n        subjectHash = certifiedEmailSubjectHash;\n        bodyHash = certifiedEmailBodyHash;\n        deliveryType = certifiedEmailDeliveryType;\n        createdAt = certifiedEmailCreatedAt;\n        deployer = certifiedEmailDeployer;\n        signaturit = msg.sender;\n\n        owner = certifiedEmailOwner;\n\n        userContract = SignaturitUserInterface(userSmartContractAddress);\n    }\n\n    modifier signaturitOnly () {\n        require(\n            tx.origin == signaturit,\n            \"Only Signaturit account can perform this action\"\n        );\n\n        _;\n    }\n\n    function notifyCreation()\n        public\n        signaturitOnly\n    {\n        notifyEntityEvent(CERTIFIED_EMAIL_NOTIFIERS_KEY, CERTIFIED_EMAIL_CREATED_EVENT, address(this));\n    }\n\n    function createCertificate(\n        string memory certificateId,\n        uint certificateCreatedAt,\n        address certificateOwner\n    )\n        public\n        signaturitOnly\n    {\n        CertificateInterface certificate = _getCertificate(certificateId);\n\n        certificate.init(certificateOwner, certificateCreatedAt);\n\n        certificatesId.push(certificateId);\n\n        notifyEntityEvent(CERTIFICATE_NOTIFIERS_KEY, CERTIFICATE_CREATED_EVENT, address(certificate));\n    }\n\n    function createEvent(\n        string memory certificateId,\n        string memory eventId,\n        string memory eventType,\n        string memory eventUserAgent,\n        uint eventCreatedAt\n    )\n        public\n        signaturitOnly\n    {\n        CertificateInterface certificate = _getCertificate(certificateId);\n\n        certificate.createEvent(\n            eventId,\n            eventType,\n            eventUserAgent,\n            eventCreatedAt\n        );\n\n        EventInterface certifiedEmailEvent = EventInterface(certificate.getEvent(eventId));\n\n        require(\n            address(certifiedEmailEvent) != address(0),\n            \"Error while retrieving event from certificate\"\n        );\n\n        notifyEntityEvent(EVENT_NOTIFIERS_KEY, EVENT_CREATED_EVENT, address(certifiedEmailEvent));\n    }\n\n    function createFile(\n        string memory certificateId,\n        string memory fileHash,\n        string memory fileId,\n        string memory fileName,\n        uint fileCreatedAt,\n        uint fileSize\n    )\n        public\n        signaturitOnly\n    {\n        CertificateInterface certificate = _getCertificate(certificateId);\n\n        certificate.createFile(\n            fileHash,\n            fileId,\n            fileName,\n            fileCreatedAt,\n            fileSize\n        );\n\n        FileInterface certifiedEmailFile = certificate.file();\n\n        require(\n            address(certifiedEmailFile) != address(0),\n            \"Error while retrieving file from certificate\"\n        );\n\n        notifyEntityEvent(FILE_NOTIFIERS_KEY, FILE_CREATED_EVENT, address(certifiedEmailFile));\n    }\n\n    function getCertificate (\n        string memory certificateId\n    )\n        public\n        view\n        returns (address)\n    {\n        if (!_certificateExist(certificateId)) return address(0);\n\n        return address(certificates[certificateId]);\n    }\n\n    function getCertificateByIndex(\n        uint index\n    )\n        public\n        view\n        returns (address)\n    {\n        if (index > certificatesId.length - 1) return address(0);\n\n        return address(certificates[certificatesId[index]]);\n    }\n\n\n    function getEvent(\n        string memory certificateId,\n        string memory eventId\n    )\n        public\n        view\n        returns (address)\n    {\n        if (!_certificateExist(certificateId)) return address(0);\n\n        EventInterface certifiedEmailEvent = EventInterface(certificates[certificateId].getEvent(\n            eventId\n        ));\n\n        if (address(certifiedEmailEvent) == address(0)) return address(0);\n\n        return address(certifiedEmailEvent);\n    }\n\n    function getFile(\n        string memory certificateId\n    )\n        public\n        view\n        returns (address)\n    {\n        if (!_certificateExist(certificateId)) return address(0);\n\n        FileInterface certifiedEmailFile = certificates[certificateId].file();\n\n        if (address(certifiedEmailFile) == address(0)) return address(0);\n\n        return address(certifiedEmailFile);\n    }\n\n    function getCertificatesSize()\n        public\n        view\n        returns (uint)\n    {\n        return certificatesId.length;\n    }\n\n    function notifyEntityEvent (\n        string memory notifiersKey,\n        string memory createdEvent,\n        address adrToNotify\n    )\n        public\n        signaturitOnly\n    {\n        address contractToNofify;\n        uint notificationIndex = 0;\n\n        do {\n            contractToNofify = userContract.getAddressArrayAttribute(notifiersKey, notificationIndex);\n            ++notificationIndex;\n\n            if (contractToNofify != address(0)) {\n                contractToNofify.call(\n                    abi.encodeWithSignature(\n                        \"notify(string,address)\",\n                        createdEvent,\n                        adrToNotify\n                    )\n                );\n            }\n        } while (contractToNofify != address(0));\n    }\n\n\n    function _certificateExist(\n        string memory certificateId\n    )\n        private\n        view\n        returns (bool)\n    {\n        return address(certificates[certificateId]) != address(0);\n    }\n\n    function _getCertificate(\n        string memory certificateId\n    )\n        private\n        returns (CertificateInterface)\n    {\n        if (_certificateExist(certificateId))\n            return certificates[certificateId];\n\n        (\n            bool success,\n            bytes memory returnData\n        ) = deployer.delegatecall(\n            abi.encodeWithSignature(\n                \"deployCertificate(string,address)\",\n                certificateId,\n                deployer\n            )\n        );\n\n        require(\n            success,\n            \"Error while deploying certificate\"\n        );\n\n        certificates[certificateId] = CertificateInterface(\n            Utils._bytesToAddress(returnData)\n        );\n\n        return certificates[certificateId];\n    }\n}\n",
  "sourcePath": "/home/administrator/workspace/signaturit-solidity-contracts/contracts/CertifiedEmail.sol",
  "ast": {
    "absolutePath": "/home/administrator/workspace/signaturit-solidity-contracts/contracts/CertifiedEmail.sol",
    "exportedSymbols": {
      "CertifiedEmail": [
        874
      ]
    },
    "id": 875,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 305,
        "literals": [
          "solidity",
          "<",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:2"
      },
      {
        "absolutePath": "/home/administrator/workspace/signaturit-solidity-contracts/contracts/interfaces/CertifiedEmailInterface.sol",
        "file": "./interfaces/CertifiedEmailInterface.sol",
        "id": 306,
        "nodeType": "ImportDirective",
        "scope": 875,
        "sourceUnit": 6711,
        "src": "57:50:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/administrator/workspace/signaturit-solidity-contracts/contracts/interfaces/SignaturitUserInterface.sol",
        "file": "./interfaces/SignaturitUserInterface.sol",
        "id": 307,
        "nodeType": "ImportDirective",
        "scope": 875,
        "sourceUnit": 7252,
        "src": "108:50:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/administrator/workspace/signaturit-solidity-contracts/contracts/interfaces/CertificateInterface.sol",
        "file": "./interfaces/CertificateInterface.sol",
        "id": 308,
        "nodeType": "ImportDirective",
        "scope": 875,
        "sourceUnit": 6589,
        "src": "159:47:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/administrator/workspace/signaturit-solidity-contracts/contracts/interfaces/EventInterface.sol",
        "file": "./interfaces/EventInterface.sol",
        "id": 309,
        "nodeType": "ImportDirective",
        "scope": 875,
        "sourceUnit": 6892,
        "src": "207:41:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/administrator/workspace/signaturit-solidity-contracts/contracts/interfaces/FileInterface.sol",
        "file": "./interfaces/FileInterface.sol",
        "id": 310,
        "nodeType": "ImportDirective",
        "scope": 875,
        "sourceUnit": 6918,
        "src": "249:40:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/administrator/workspace/signaturit-solidity-contracts/contracts/libraries/Utils.sol",
        "file": "./libraries/Utils.sol",
        "id": 311,
        "nodeType": "ImportDirective",
        "scope": 875,
        "sourceUnit": 7290,
        "src": "290:31:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 312,
              "name": "CertifiedEmailInterface",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6710,
              "src": "351:23:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CertifiedEmailInterface_$6710",
                "typeString": "contract CertifiedEmailInterface"
              }
            },
            "id": 313,
            "nodeType": "InheritanceSpecifier",
            "src": "351:23:2"
          }
        ],
        "contractDependencies": [
          6710
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 874,
        "linearizedBaseContracts": [
          874,
          6710
        ],
        "name": "CertifiedEmail",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 316,
            "name": "CERTIFIED_EMAIL_CREATED_EVENT",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "381:90:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 314,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "381:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "6365727469666965645f656d61696c2e636f6e74726163742e63726561746564",
              "id": 315,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "437:34:2",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_ae5b77f70831a789b8fd4a912091a91a55780b1a05636a18add16c7002080c26",
                "typeString": "literal_string \"certified_email.contract.created\""
              },
              "value": "certified_email.contract.created"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 319,
            "name": "CERTIFICATE_CREATED_EVENT",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "477:82:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 317,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "477:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "63657274696669636174652e636f6e74726163742e63726561746564",
              "id": 318,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "529:30:2",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_60f55e549ede8476eef03c6c242f3f428cb14f442cf41e08e5091b8acc5bd485",
                "typeString": "literal_string \"certificate.contract.created\""
              },
              "value": "certificate.contract.created"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 322,
            "name": "FILE_CREATED_EVENT",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "565:68:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 320,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "565:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "66696c652e636f6e74726163742e63726561746564",
              "id": 321,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "610:23:2",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_2233a27e702ee6162cc2e308200369bccc6b94a4aee0e31589d2f43a31c28a19",
                "typeString": "literal_string \"file.contract.created\""
              },
              "value": "file.contract.created"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 325,
            "name": "EVENT_CREATED_EVENT",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "639:70:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 323,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "639:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "6576656e742e636f6e74726163742e63726561746564",
              "id": 324,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "685:24:2",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_940d087e88f9b637f99eb8adf4909f7a72371a7de914372d49d6ef145f5d420a",
                "typeString": "literal_string \"event.contract.created\""
              },
              "value": "event.contract.created"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 328,
            "name": "CERTIFIED_EMAIL_NOTIFIERS_KEY",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "716:83:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 326,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "716:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "6365727469666965642d656d61696c2d6e6f74696669657273",
              "id": 327,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "772:27:2",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_34af7359cfbe393aa940dd768d8b69e9f608525971e6ac17a87116d8bbdb6179",
                "typeString": "literal_string \"certified-email-notifiers\""
              },
              "value": "certified-email-notifiers"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 331,
            "name": "CERTIFICATE_NOTIFIERS_KEY",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "805:75:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 329,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "805:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "63657274696669636174652d6e6f74696669657273",
              "id": 330,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "857:23:2",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_e9de243ad0d1c8f5caa2f997b8265730fa86b037e7af2461b0b6837c6e81fe66",
                "typeString": "literal_string \"certificate-notifiers\""
              },
              "value": "certificate-notifiers"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 334,
            "name": "FILE_NOTIFIERS_KEY",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "886:61:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 332,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "886:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "66696c652d6e6f74696669657273",
              "id": 333,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "931:16:2",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_564d80aba11e51a3eff777d482df81c48f4da2423384618e7be1ee86ad1bfee6",
                "typeString": "literal_string \"file-notifiers\""
              },
              "value": "file-notifiers"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 337,
            "name": "EVENT_NOTIFIERS_KEY",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "953:63:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 335,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "953:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "6576656e742d6e6f74696669657273",
              "id": 336,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "999:17:2",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_b25bd55d22992cd8575c70596ff0d0e7a67a2b59c4214f4f8859fdd431ce46f0",
                "typeString": "literal_string \"event-notifiers\""
              },
              "value": "event-notifiers"
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 339,
            "name": "signaturit",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "1023:25:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 338,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1023:7:2",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 341,
            "name": "deployer",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "1054:23:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 340,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1054:7:2",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 343,
            "name": "owner",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "1083:20:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 342,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1083:7:2",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 345,
            "name": "id",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "1110:16:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 344,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1110:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 347,
            "name": "subjectHash",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "1132:25:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 346,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1132:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 349,
            "name": "bodyHash",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "1163:22:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 348,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1163:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 351,
            "name": "deliveryType",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "1191:26:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 350,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1191:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 354,
            "name": "certificatesId",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "1224:30:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
              "typeString": "string[]"
            },
            "typeName": {
              "baseType": {
                "id": 352,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "1224:6:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              },
              "id": 353,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "1224:8:2",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_string_storage_$dyn_storage_ptr",
                "typeString": "string[]"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 356,
            "name": "createdAt",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "1261:21:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 355,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "1261:4:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 358,
            "name": "userContract",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "1289:43:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_SignaturitUserInterface_$7251",
              "typeString": "contract SignaturitUserInterface"
            },
            "typeName": {
              "contractScope": null,
              "id": 357,
              "name": "SignaturitUserInterface",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 7251,
              "src": "1289:23:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SignaturitUserInterface_$7251",
                "typeString": "contract SignaturitUserInterface"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 362,
            "name": "certificates",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "1339:60:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_string_memory_$_t_contract$_CertificateInterface_$6588_$",
              "typeString": "mapping(string => contract CertificateInterface)"
            },
            "typeName": {
              "id": 361,
              "keyType": {
                "id": 359,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "1347:6:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              },
              "nodeType": "Mapping",
              "src": "1339:39:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_string_memory_$_t_contract$_CertificateInterface_$6588_$",
                "typeString": "mapping(string => contract CertificateInterface)"
              },
              "valueType": {
                "contractScope": null,
                "id": 360,
                "name": "CertificateInterface",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 6588,
                "src": "1357:20:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                  "typeString": "contract CertificateInterface"
                }
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 420,
              "nodeType": "Block",
              "src": "1773:415:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 383,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 381,
                      "name": "id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 345,
                      "src": "1783:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 382,
                      "name": "certifiedEmailId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 364,
                      "src": "1788:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "1783:21:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 384,
                  "nodeType": "ExpressionStatement",
                  "src": "1783:21:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 387,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 385,
                      "name": "subjectHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 347,
                      "src": "1814:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 386,
                      "name": "certifiedEmailSubjectHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 366,
                      "src": "1828:25:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "1814:39:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 388,
                  "nodeType": "ExpressionStatement",
                  "src": "1814:39:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 391,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 389,
                      "name": "bodyHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 349,
                      "src": "1863:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 390,
                      "name": "certifiedEmailBodyHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 368,
                      "src": "1874:22:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "1863:33:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 392,
                  "nodeType": "ExpressionStatement",
                  "src": "1863:33:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 395,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 393,
                      "name": "deliveryType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 351,
                      "src": "1906:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 394,
                      "name": "certifiedEmailDeliveryType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 370,
                      "src": "1921:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "1906:41:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 396,
                  "nodeType": "ExpressionStatement",
                  "src": "1906:41:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 399,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 397,
                      "name": "createdAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 356,
                      "src": "1957:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 398,
                      "name": "certifiedEmailCreatedAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 372,
                      "src": "1969:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1957:35:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 400,
                  "nodeType": "ExpressionStatement",
                  "src": "1957:35:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 403,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 401,
                      "name": "deployer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 341,
                      "src": "2002:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 402,
                      "name": "certifiedEmailDeployer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 374,
                      "src": "2013:22:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2002:33:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 404,
                  "nodeType": "ExpressionStatement",
                  "src": "2002:33:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 408,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 405,
                      "name": "signaturit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 339,
                      "src": "2045:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 406,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7304,
                        "src": "2058:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 407,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2058:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "2045:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 409,
                  "nodeType": "ExpressionStatement",
                  "src": "2045:23:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 412,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 410,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 343,
                      "src": "2079:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 411,
                      "name": "certifiedEmailOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 376,
                      "src": "2087:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2079:27:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 413,
                  "nodeType": "ExpressionStatement",
                  "src": "2079:27:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 418,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 414,
                      "name": "userContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 358,
                      "src": "2117:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_SignaturitUserInterface_$7251",
                        "typeString": "contract SignaturitUserInterface"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 416,
                          "name": "userSmartContractAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 378,
                          "src": "2156:24:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 415,
                        "name": "SignaturitUserInterface",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7251,
                        "src": "2132:23:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_SignaturitUserInterface_$7251_$",
                          "typeString": "type(contract SignaturitUserInterface)"
                        }
                      },
                      "id": 417,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2132:49:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_SignaturitUserInterface_$7251",
                        "typeString": "contract SignaturitUserInterface"
                      }
                    },
                    "src": "2117:64:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SignaturitUserInterface_$7251",
                      "typeString": "contract SignaturitUserInterface"
                    }
                  },
                  "id": 419,
                  "nodeType": "ExpressionStatement",
                  "src": "2117:64:2"
                }
              ]
            },
            "documentation": null,
            "id": 421,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 379,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 364,
                  "name": "certifiedEmailId",
                  "nodeType": "VariableDeclaration",
                  "scope": 421,
                  "src": "1427:30:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 363,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1427:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 366,
                  "name": "certifiedEmailSubjectHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 421,
                  "src": "1467:39:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 365,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1467:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 368,
                  "name": "certifiedEmailBodyHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 421,
                  "src": "1516:36:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 367,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1516:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 370,
                  "name": "certifiedEmailDeliveryType",
                  "nodeType": "VariableDeclaration",
                  "scope": 421,
                  "src": "1562:40:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 369,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1562:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 372,
                  "name": "certifiedEmailCreatedAt",
                  "nodeType": "VariableDeclaration",
                  "scope": 421,
                  "src": "1612:28:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 371,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1612:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 374,
                  "name": "certifiedEmailDeployer",
                  "nodeType": "VariableDeclaration",
                  "scope": 421,
                  "src": "1650:30:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 373,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1650:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 376,
                  "name": "certifiedEmailOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 421,
                  "src": "1690:27:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 375,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1690:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 378,
                  "name": "userSmartContractAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 421,
                  "src": "1727:32:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 377,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1727:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1417:348:2"
            },
            "returnParameters": {
              "id": 380,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1773:0:2"
            },
            "scope": 874,
            "src": "1406:782:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 432,
              "nodeType": "Block",
              "src": "2221:146:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 427,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 424,
                            "name": "tx",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7316,
                            "src": "2252:2:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_transaction",
                              "typeString": "tx"
                            }
                          },
                          "id": 425,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "origin",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2252:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 426,
                          "name": "signaturit",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 339,
                          "src": "2265:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2252:23:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f6e6c79205369676e617475726974206163636f756e742063616e20706572666f726d207468697320616374696f6e",
                        "id": 428,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2289:49:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c4d39fb6c3ef76259aa8a9c7aa83179d818e17cba0db927afcdb36c571443b99",
                          "typeString": "literal_string \"Only Signaturit account can perform this action\""
                        },
                        "value": "Only Signaturit account can perform this action"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c4d39fb6c3ef76259aa8a9c7aa83179d818e17cba0db927afcdb36c571443b99",
                          "typeString": "literal_string \"Only Signaturit account can perform this action\""
                        }
                      ],
                      "id": 423,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7307,
                        7308
                      ],
                      "referencedDeclaration": 7308,
                      "src": "2231:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 429,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2231:117:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 430,
                  "nodeType": "ExpressionStatement",
                  "src": "2231:117:2"
                },
                {
                  "id": 431,
                  "nodeType": "PlaceholderStatement",
                  "src": "2359:1:2"
                }
              ]
            },
            "documentation": null,
            "id": 433,
            "name": "signaturitOnly",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 422,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2218:2:2"
            },
            "src": "2194:173:2",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 446,
              "nodeType": "Block",
              "src": "2441:111:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 439,
                        "name": "CERTIFIED_EMAIL_NOTIFIERS_KEY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 328,
                        "src": "2469:29:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 440,
                        "name": "CERTIFIED_EMAIL_CREATED_EVENT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 316,
                        "src": "2500:29:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 442,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7333,
                            "src": "2539:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CertifiedEmail_$874",
                              "typeString": "contract CertifiedEmail"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CertifiedEmail_$874",
                              "typeString": "contract CertifiedEmail"
                            }
                          ],
                          "id": 441,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2531:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 443,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2531:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 438,
                      "name": "notifyEntityEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        805
                      ],
                      "referencedDeclaration": 805,
                      "src": "2451:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_address_$returns$__$",
                        "typeString": "function (string memory,string memory,address)"
                      }
                    },
                    "id": 444,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2451:94:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 445,
                  "nodeType": "ExpressionStatement",
                  "src": "2451:94:2"
                }
              ]
            },
            "documentation": null,
            "id": 447,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 436,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 435,
                  "name": "signaturitOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 433,
                  "src": "2422:14:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2422:14:2"
              }
            ],
            "name": "notifyCreation",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 434,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2396:2:2"
            },
            "returnParameters": {
              "id": 437,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2441:0:2"
            },
            "scope": 874,
            "src": "2373:179:2",
            "stateMutability": "nonpayable",
            "superFunction": 6621,
            "visibility": "public"
          },
          {
            "body": {
              "id": 485,
              "nodeType": "Block",
              "src": "2739:298:2",
              "statements": [
                {
                  "assignments": [
                    459
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 459,
                      "name": "certificate",
                      "nodeType": "VariableDeclaration",
                      "scope": 485,
                      "src": "2749:32:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                        "typeString": "contract CertificateInterface"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 458,
                        "name": "CertificateInterface",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6588,
                        "src": "2749:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                          "typeString": "contract CertificateInterface"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 463,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 461,
                        "name": "certificateId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 449,
                        "src": "2800:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 460,
                      "name": "_getCertificate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 873,
                      "src": "2784:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$returns$_t_contract$_CertificateInterface_$6588_$",
                        "typeString": "function (string memory) returns (contract CertificateInterface)"
                      }
                    },
                    "id": 462,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2784:30:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                      "typeString": "contract CertificateInterface"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2749:65:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 467,
                        "name": "certificateOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 453,
                        "src": "2842:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 468,
                        "name": "certificateCreatedAt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 451,
                        "src": "2860:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 464,
                        "name": "certificate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 459,
                        "src": "2825:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                          "typeString": "contract CertificateInterface"
                        }
                      },
                      "id": 466,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "init",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6551,
                      "src": "2825:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 469,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2825:56:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 470,
                  "nodeType": "ExpressionStatement",
                  "src": "2825:56:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 474,
                        "name": "certificateId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 449,
                        "src": "2912:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 471,
                        "name": "certificatesId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 354,
                        "src": "2892:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                          "typeString": "string storage ref[] storage ref"
                        }
                      },
                      "id": 473,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2892:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_string_storage_$returns$_t_uint256_$",
                        "typeString": "function (string storage ref) returns (uint256)"
                      }
                    },
                    "id": 475,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2892:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 476,
                  "nodeType": "ExpressionStatement",
                  "src": "2892:34:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 478,
                        "name": "CERTIFICATE_NOTIFIERS_KEY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 331,
                        "src": "2955:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 479,
                        "name": "CERTIFICATE_CREATED_EVENT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 319,
                        "src": "2982:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 481,
                            "name": "certificate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 459,
                            "src": "3017:11:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                              "typeString": "contract CertificateInterface"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                              "typeString": "contract CertificateInterface"
                            }
                          ],
                          "id": 480,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3009:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 482,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3009:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 477,
                      "name": "notifyEntityEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        805
                      ],
                      "referencedDeclaration": 805,
                      "src": "2937:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_address_$returns$__$",
                        "typeString": "function (string memory,string memory,address)"
                      }
                    },
                    "id": 483,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2937:93:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 484,
                  "nodeType": "ExpressionStatement",
                  "src": "2937:93:2"
                }
              ]
            },
            "documentation": null,
            "id": 486,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 456,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 455,
                  "name": "signaturitOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 433,
                  "src": "2720:14:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2720:14:2"
              }
            ],
            "name": "createCertificate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 454,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 449,
                  "name": "certificateId",
                  "nodeType": "VariableDeclaration",
                  "scope": 486,
                  "src": "2594:27:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 448,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2594:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 451,
                  "name": "certificateCreatedAt",
                  "nodeType": "VariableDeclaration",
                  "scope": 486,
                  "src": "2631:25:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 450,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2631:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 453,
                  "name": "certificateOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 486,
                  "src": "2666:24:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 452,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2666:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2584:112:2"
            },
            "returnParameters": {
              "id": 457,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2739:0:2"
            },
            "scope": 874,
            "src": "2558:479:2",
            "stateMutability": "nonpayable",
            "superFunction": 6630,
            "visibility": "public"
          },
          {
            "body": {
              "id": 544,
              "nodeType": "Block",
              "src": "3280:564:2",
              "statements": [
                {
                  "assignments": [
                    502
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 502,
                      "name": "certificate",
                      "nodeType": "VariableDeclaration",
                      "scope": 544,
                      "src": "3290:32:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                        "typeString": "contract CertificateInterface"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 501,
                        "name": "CertificateInterface",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6588,
                        "src": "3290:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                          "typeString": "contract CertificateInterface"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 506,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 504,
                        "name": "certificateId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 488,
                        "src": "3341:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 503,
                      "name": "_getCertificate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 873,
                      "src": "3325:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$returns$_t_contract$_CertificateInterface_$6588_$",
                        "typeString": "function (string memory) returns (contract CertificateInterface)"
                      }
                    },
                    "id": 505,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3325:30:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                      "typeString": "contract CertificateInterface"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3290:65:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 510,
                        "name": "eventId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 490,
                        "src": "3403:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 511,
                        "name": "eventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 492,
                        "src": "3424:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 512,
                        "name": "eventUserAgent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 494,
                        "src": "3447:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 513,
                        "name": "eventCreatedAt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 496,
                        "src": "3475:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 507,
                        "name": "certificate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 502,
                        "src": "3366:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                          "typeString": "contract CertificateInterface"
                        }
                      },
                      "id": 509,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "createEvent",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6575,
                      "src": "3366:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (string memory,string memory,string memory,uint256) external"
                      }
                    },
                    "id": 514,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3366:133:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 515,
                  "nodeType": "ExpressionStatement",
                  "src": "3366:133:2"
                },
                {
                  "assignments": [
                    517
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 517,
                      "name": "certifiedEmailEvent",
                      "nodeType": "VariableDeclaration",
                      "scope": 544,
                      "src": "3510:34:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_EventInterface_$6891",
                        "typeString": "contract EventInterface"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 516,
                        "name": "EventInterface",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6891,
                        "src": "3510:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EventInterface_$6891",
                          "typeString": "contract EventInterface"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 524,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 521,
                            "name": "eventId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 490,
                            "src": "3583:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 519,
                            "name": "certificate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 502,
                            "src": "3562:11:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                              "typeString": "contract CertificateInterface"
                            }
                          },
                          "id": 520,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "getEvent",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6582,
                          "src": "3562:20:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_string_memory_ptr_$returns$_t_address_$",
                            "typeString": "function (string memory) view external returns (address)"
                          }
                        },
                        "id": 522,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3562:29:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 518,
                      "name": "EventInterface",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6891,
                      "src": "3547:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_EventInterface_$6891_$",
                        "typeString": "type(contract EventInterface)"
                      }
                    },
                    "id": 523,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3547:45:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_EventInterface_$6891",
                      "typeString": "contract EventInterface"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3510:82:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 532,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 527,
                              "name": "certifiedEmailEvent",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 517,
                              "src": "3632:19:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_EventInterface_$6891",
                                "typeString": "contract EventInterface"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_EventInterface_$6891",
                                "typeString": "contract EventInterface"
                              }
                            ],
                            "id": 526,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3624:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 528,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3624:28:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 530,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3664:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 529,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3656:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 531,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3656:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "3624:42:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4572726f72207768696c652072657472696576696e67206576656e742066726f6d206365727469666963617465",
                        "id": 533,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3680:47:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_98ec96d2a800dee2ee539c923d1c485436943d01cd1d1913059ea7bb7f84f327",
                          "typeString": "literal_string \"Error while retrieving event from certificate\""
                        },
                        "value": "Error while retrieving event from certificate"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_98ec96d2a800dee2ee539c923d1c485436943d01cd1d1913059ea7bb7f84f327",
                          "typeString": "literal_string \"Error while retrieving event from certificate\""
                        }
                      ],
                      "id": 525,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7307,
                        7308
                      ],
                      "referencedDeclaration": 7308,
                      "src": "3603:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 534,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3603:134:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 535,
                  "nodeType": "ExpressionStatement",
                  "src": "3603:134:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 537,
                        "name": "EVENT_NOTIFIERS_KEY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 337,
                        "src": "3766:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 538,
                        "name": "EVENT_CREATED_EVENT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 325,
                        "src": "3787:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 540,
                            "name": "certifiedEmailEvent",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 517,
                            "src": "3816:19:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_EventInterface_$6891",
                              "typeString": "contract EventInterface"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_EventInterface_$6891",
                              "typeString": "contract EventInterface"
                            }
                          ],
                          "id": 539,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3808:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 541,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3808:28:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 536,
                      "name": "notifyEntityEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        805
                      ],
                      "referencedDeclaration": 805,
                      "src": "3748:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_address_$returns$__$",
                        "typeString": "function (string memory,string memory,address)"
                      }
                    },
                    "id": 542,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3748:89:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 543,
                  "nodeType": "ExpressionStatement",
                  "src": "3748:89:2"
                }
              ]
            },
            "documentation": null,
            "id": 545,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 499,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 498,
                  "name": "signaturitOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 433,
                  "src": "3261:14:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3261:14:2"
              }
            ],
            "name": "createEvent",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 497,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 488,
                  "name": "certificateId",
                  "nodeType": "VariableDeclaration",
                  "scope": 545,
                  "src": "3073:27:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 487,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3073:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 490,
                  "name": "eventId",
                  "nodeType": "VariableDeclaration",
                  "scope": 545,
                  "src": "3110:21:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 489,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3110:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 492,
                  "name": "eventType",
                  "nodeType": "VariableDeclaration",
                  "scope": 545,
                  "src": "3141:23:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 491,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3141:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 494,
                  "name": "eventUserAgent",
                  "nodeType": "VariableDeclaration",
                  "scope": 545,
                  "src": "3174:28:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 493,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3174:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 496,
                  "name": "eventCreatedAt",
                  "nodeType": "VariableDeclaration",
                  "scope": 545,
                  "src": "3212:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 495,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3212:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3063:174:2"
            },
            "returnParameters": {
              "id": 500,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3280:0:2"
            },
            "scope": 874,
            "src": "3043:801:2",
            "stateMutability": "nonpayable",
            "superFunction": 6643,
            "visibility": "public"
          },
          {
            "body": {
              "id": 603,
              "nodeType": "Block",
              "src": "4100:542:2",
              "statements": [
                {
                  "assignments": [
                    563
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 563,
                      "name": "certificate",
                      "nodeType": "VariableDeclaration",
                      "scope": 603,
                      "src": "4110:32:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                        "typeString": "contract CertificateInterface"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 562,
                        "name": "CertificateInterface",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6588,
                        "src": "4110:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                          "typeString": "contract CertificateInterface"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 567,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 565,
                        "name": "certificateId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 547,
                        "src": "4161:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 564,
                      "name": "_getCertificate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 873,
                      "src": "4145:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$returns$_t_contract$_CertificateInterface_$6588_$",
                        "typeString": "function (string memory) returns (contract CertificateInterface)"
                      }
                    },
                    "id": 566,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4145:30:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                      "typeString": "contract CertificateInterface"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4110:65:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 571,
                        "name": "fileHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 549,
                        "src": "4222:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 572,
                        "name": "fileId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 551,
                        "src": "4244:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 573,
                        "name": "fileName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 553,
                        "src": "4264:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 574,
                        "name": "fileCreatedAt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 555,
                        "src": "4286:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 575,
                        "name": "fileSize",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 557,
                        "src": "4313:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 568,
                        "name": "certificate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 563,
                        "src": "4186:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                          "typeString": "contract CertificateInterface"
                        }
                      },
                      "id": 570,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "createFile",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6564,
                      "src": "4186:22:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (string memory,string memory,string memory,uint256,uint256) external"
                      }
                    },
                    "id": 576,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4186:145:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 577,
                  "nodeType": "ExpressionStatement",
                  "src": "4186:145:2"
                },
                {
                  "assignments": [
                    579
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 579,
                      "name": "certifiedEmailFile",
                      "nodeType": "VariableDeclaration",
                      "scope": 603,
                      "src": "4342:32:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_FileInterface_$6917",
                        "typeString": "contract FileInterface"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 578,
                        "name": "FileInterface",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6917,
                        "src": "4342:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_FileInterface_$6917",
                          "typeString": "contract FileInterface"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 583,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 580,
                        "name": "certificate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 563,
                        "src": "4377:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                          "typeString": "contract CertificateInterface"
                        }
                      },
                      "id": 581,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "file",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6540,
                      "src": "4377:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_FileInterface_$6917_$",
                        "typeString": "function () view external returns (contract FileInterface)"
                      }
                    },
                    "id": 582,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4377:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_FileInterface_$6917",
                      "typeString": "contract FileInterface"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4342:53:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 591,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 586,
                              "name": "certifiedEmailFile",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 579,
                              "src": "4435:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_FileInterface_$6917",
                                "typeString": "contract FileInterface"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_FileInterface_$6917",
                                "typeString": "contract FileInterface"
                              }
                            ],
                            "id": 585,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4427:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 587,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4427:27:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 589,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4466:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 588,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4458:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 590,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4458:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "4427:41:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4572726f72207768696c652072657472696576696e672066696c652066726f6d206365727469666963617465",
                        "id": 592,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4482:46:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_facd9cab22b0355a7475ad61b5343b0bc56202c3a9709de253f694b746dafde6",
                          "typeString": "literal_string \"Error while retrieving file from certificate\""
                        },
                        "value": "Error while retrieving file from certificate"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_facd9cab22b0355a7475ad61b5343b0bc56202c3a9709de253f694b746dafde6",
                          "typeString": "literal_string \"Error while retrieving file from certificate\""
                        }
                      ],
                      "id": 584,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7307,
                        7308
                      ],
                      "referencedDeclaration": 7308,
                      "src": "4406:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 593,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4406:132:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 594,
                  "nodeType": "ExpressionStatement",
                  "src": "4406:132:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 596,
                        "name": "FILE_NOTIFIERS_KEY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 334,
                        "src": "4567:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 597,
                        "name": "FILE_CREATED_EVENT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 322,
                        "src": "4587:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 599,
                            "name": "certifiedEmailFile",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 579,
                            "src": "4615:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_FileInterface_$6917",
                              "typeString": "contract FileInterface"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_FileInterface_$6917",
                              "typeString": "contract FileInterface"
                            }
                          ],
                          "id": 598,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4607:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 600,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4607:27:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 595,
                      "name": "notifyEntityEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        805
                      ],
                      "referencedDeclaration": 805,
                      "src": "4549:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_address_$returns$__$",
                        "typeString": "function (string memory,string memory,address)"
                      }
                    },
                    "id": 601,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4549:86:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 602,
                  "nodeType": "ExpressionStatement",
                  "src": "4549:86:2"
                }
              ]
            },
            "documentation": null,
            "id": 604,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 560,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 559,
                  "name": "signaturitOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 433,
                  "src": "4081:14:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4081:14:2"
              }
            ],
            "name": "createFile",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 558,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 547,
                  "name": "certificateId",
                  "nodeType": "VariableDeclaration",
                  "scope": 604,
                  "src": "3879:27:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 546,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3879:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 549,
                  "name": "fileHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 604,
                  "src": "3916:22:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 548,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3916:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 551,
                  "name": "fileId",
                  "nodeType": "VariableDeclaration",
                  "scope": 604,
                  "src": "3948:20:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 550,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3948:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 553,
                  "name": "fileName",
                  "nodeType": "VariableDeclaration",
                  "scope": 604,
                  "src": "3978:22:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 552,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3978:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 555,
                  "name": "fileCreatedAt",
                  "nodeType": "VariableDeclaration",
                  "scope": 604,
                  "src": "4010:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 554,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "4010:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 557,
                  "name": "fileSize",
                  "nodeType": "VariableDeclaration",
                  "scope": 604,
                  "src": "4038:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 556,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "4038:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3869:188:2"
            },
            "returnParameters": {
              "id": 561,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4100:0:2"
            },
            "scope": 874,
            "src": "3850:792:2",
            "stateMutability": "nonpayable",
            "superFunction": 6658,
            "visibility": "public"
          },
          {
            "body": {
              "id": 626,
              "nodeType": "Block",
              "src": "4774:127:2",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 614,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "4788:33:2",
                    "subExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 612,
                          "name": "certificateId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 606,
                          "src": "4807:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        ],
                        "id": 611,
                        "name": "_certificateExist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 823,
                        "src": "4789:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$_t_bool_$",
                          "typeString": "function (string memory) view returns (bool)"
                        }
                      },
                      "id": 613,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4789:32:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 619,
                  "nodeType": "IfStatement",
                  "src": "4784:56:2",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 616,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4838:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 615,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4830:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 617,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4830:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "functionReturnParameters": 610,
                    "id": 618,
                    "nodeType": "Return",
                    "src": "4823:17:2"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 621,
                          "name": "certificates",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 362,
                          "src": "4866:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_string_memory_$_t_contract$_CertificateInterface_$6588_$",
                            "typeString": "mapping(string memory => contract CertificateInterface)"
                          }
                        },
                        "id": 623,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 622,
                          "name": "certificateId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 606,
                          "src": "4879:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "4866:27:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                          "typeString": "contract CertificateInterface"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                          "typeString": "contract CertificateInterface"
                        }
                      ],
                      "id": 620,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "4858:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 624,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4858:36:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 610,
                  "id": 625,
                  "nodeType": "Return",
                  "src": "4851:43:2"
                }
              ]
            },
            "documentation": null,
            "id": 627,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getCertificate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 607,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 606,
                  "name": "certificateId",
                  "nodeType": "VariableDeclaration",
                  "scope": 627,
                  "src": "4682:27:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 605,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "4682:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4672:43:2"
            },
            "returnParameters": {
              "id": 610,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 609,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 627,
                  "src": "4761:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 608,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4761:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4760:9:2"
            },
            "scope": 874,
            "src": "4648:253:2",
            "stateMutability": "view",
            "superFunction": 6665,
            "visibility": "public"
          },
          {
            "body": {
              "id": 653,
              "nodeType": "Block",
              "src": "5022:135:2",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 639,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 634,
                      "name": "index",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 629,
                      "src": "5036:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 638,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 635,
                          "name": "certificatesId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 354,
                          "src": "5044:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                            "typeString": "string storage ref[] storage ref"
                          }
                        },
                        "id": 636,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5044:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 637,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5068:1:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "5044:25:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5036:33:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 644,
                  "nodeType": "IfStatement",
                  "src": "5032:56:2",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 641,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5086:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 640,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5078:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 642,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5078:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "functionReturnParameters": 633,
                    "id": 643,
                    "nodeType": "Return",
                    "src": "5071:17:2"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 646,
                          "name": "certificates",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 362,
                          "src": "5114:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_string_memory_$_t_contract$_CertificateInterface_$6588_$",
                            "typeString": "mapping(string memory => contract CertificateInterface)"
                          }
                        },
                        "id": 650,
                        "indexExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 647,
                            "name": "certificatesId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 354,
                            "src": "5127:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                              "typeString": "string storage ref[] storage ref"
                            }
                          },
                          "id": 649,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 648,
                            "name": "index",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 629,
                            "src": "5142:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "5127:21:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5114:35:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                          "typeString": "contract CertificateInterface"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                          "typeString": "contract CertificateInterface"
                        }
                      ],
                      "id": 645,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "5106:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 651,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5106:44:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 633,
                  "id": 652,
                  "nodeType": "Return",
                  "src": "5099:51:2"
                }
              ]
            },
            "documentation": null,
            "id": 654,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getCertificateByIndex",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 630,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 629,
                  "name": "index",
                  "nodeType": "VariableDeclaration",
                  "scope": 654,
                  "src": "4947:10:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 628,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "4947:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4937:26:2"
            },
            "returnParameters": {
              "id": 633,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 632,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 654,
                  "src": "5009:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 631,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5009:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5008:9:2"
            },
            "scope": 874,
            "src": "4907:250:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 699,
              "nodeType": "Block",
              "src": "5314:326:2",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 666,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "5328:33:2",
                    "subExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 664,
                          "name": "certificateId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 656,
                          "src": "5347:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        ],
                        "id": 663,
                        "name": "_certificateExist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 823,
                        "src": "5329:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$_t_bool_$",
                          "typeString": "function (string memory) view returns (bool)"
                        }
                      },
                      "id": 665,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5329:32:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 671,
                  "nodeType": "IfStatement",
                  "src": "5324:56:2",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 668,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5378:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 667,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5370:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 669,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5370:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "functionReturnParameters": 662,
                    "id": 670,
                    "nodeType": "Return",
                    "src": "5363:17:2"
                  }
                },
                {
                  "assignments": [
                    673
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 673,
                      "name": "certifiedEmailEvent",
                      "nodeType": "VariableDeclaration",
                      "scope": 699,
                      "src": "5391:34:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_EventInterface_$6891",
                        "typeString": "contract EventInterface"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 672,
                        "name": "EventInterface",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6891,
                        "src": "5391:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EventInterface_$6891",
                          "typeString": "contract EventInterface"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 682,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 679,
                            "name": "eventId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 658,
                            "src": "5493:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 675,
                              "name": "certificates",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 362,
                              "src": "5443:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_string_memory_$_t_contract$_CertificateInterface_$6588_$",
                                "typeString": "mapping(string memory => contract CertificateInterface)"
                              }
                            },
                            "id": 677,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 676,
                              "name": "certificateId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 656,
                              "src": "5456:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "5443:27:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                              "typeString": "contract CertificateInterface"
                            }
                          },
                          "id": 678,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "getEvent",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6582,
                          "src": "5443:36:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_string_memory_ptr_$returns$_t_address_$",
                            "typeString": "function (string memory) view external returns (address)"
                          }
                        },
                        "id": 680,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5443:67:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 674,
                      "name": "EventInterface",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6891,
                      "src": "5428:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_EventInterface_$6891_$",
                        "typeString": "type(contract EventInterface)"
                      }
                    },
                    "id": 681,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5428:83:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_EventInterface_$6891",
                      "typeString": "contract EventInterface"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5391:120:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 689,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 684,
                          "name": "certifiedEmailEvent",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 673,
                          "src": "5534:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_EventInterface_$6891",
                            "typeString": "contract EventInterface"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_EventInterface_$6891",
                            "typeString": "contract EventInterface"
                          }
                        ],
                        "id": 683,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5526:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 685,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5526:28:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 687,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5566:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 686,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5558:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 688,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5558:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "5526:42:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 694,
                  "nodeType": "IfStatement",
                  "src": "5522:65:2",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 691,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5585:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 690,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5577:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 692,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5577:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "functionReturnParameters": 662,
                    "id": 693,
                    "nodeType": "Return",
                    "src": "5570:17:2"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 696,
                        "name": "certifiedEmailEvent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 673,
                        "src": "5613:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EventInterface_$6891",
                          "typeString": "contract EventInterface"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_EventInterface_$6891",
                          "typeString": "contract EventInterface"
                        }
                      ],
                      "id": 695,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "5605:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 697,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5605:28:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 662,
                  "id": 698,
                  "nodeType": "Return",
                  "src": "5598:35:2"
                }
              ]
            },
            "documentation": null,
            "id": 700,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getEvent",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 659,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 656,
                  "name": "certificateId",
                  "nodeType": "VariableDeclaration",
                  "scope": 700,
                  "src": "5191:27:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 655,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5191:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 658,
                  "name": "eventId",
                  "nodeType": "VariableDeclaration",
                  "scope": 700,
                  "src": "5228:21:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 657,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5228:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5181:74:2"
            },
            "returnParameters": {
              "id": 662,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 661,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 700,
                  "src": "5301:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 660,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5301:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5300:9:2"
            },
            "scope": 874,
            "src": "5164:476:2",
            "stateMutability": "view",
            "superFunction": 6674,
            "visibility": "public"
          },
          {
            "body": {
              "id": 740,
              "nodeType": "Block",
              "src": "5764:273:2",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 710,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "5778:33:2",
                    "subExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 708,
                          "name": "certificateId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 702,
                          "src": "5797:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        ],
                        "id": 707,
                        "name": "_certificateExist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 823,
                        "src": "5779:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$_t_bool_$",
                          "typeString": "function (string memory) view returns (bool)"
                        }
                      },
                      "id": 709,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5779:32:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 715,
                  "nodeType": "IfStatement",
                  "src": "5774:56:2",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 712,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5828:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 711,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5820:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 713,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5820:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "functionReturnParameters": 706,
                    "id": 714,
                    "nodeType": "Return",
                    "src": "5813:17:2"
                  }
                },
                {
                  "assignments": [
                    717
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 717,
                      "name": "certifiedEmailFile",
                      "nodeType": "VariableDeclaration",
                      "scope": 740,
                      "src": "5841:32:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_FileInterface_$6917",
                        "typeString": "contract FileInterface"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 716,
                        "name": "FileInterface",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6917,
                        "src": "5841:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_FileInterface_$6917",
                          "typeString": "contract FileInterface"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 723,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 718,
                          "name": "certificates",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 362,
                          "src": "5876:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_string_memory_$_t_contract$_CertificateInterface_$6588_$",
                            "typeString": "mapping(string memory => contract CertificateInterface)"
                          }
                        },
                        "id": 720,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 719,
                          "name": "certificateId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 702,
                          "src": "5889:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5876:27:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                          "typeString": "contract CertificateInterface"
                        }
                      },
                      "id": 721,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "file",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6540,
                      "src": "5876:32:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_FileInterface_$6917_$",
                        "typeString": "function () view external returns (contract FileInterface)"
                      }
                    },
                    "id": 722,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5876:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_FileInterface_$6917",
                      "typeString": "contract FileInterface"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5841:69:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 730,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 725,
                          "name": "certifiedEmailFile",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 717,
                          "src": "5933:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_FileInterface_$6917",
                            "typeString": "contract FileInterface"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_FileInterface_$6917",
                            "typeString": "contract FileInterface"
                          }
                        ],
                        "id": 724,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5925:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 726,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5925:27:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 728,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5964:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 727,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5956:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 729,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5956:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "5925:41:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 735,
                  "nodeType": "IfStatement",
                  "src": "5921:64:2",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 732,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5983:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 731,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5975:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 733,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5975:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "functionReturnParameters": 706,
                    "id": 734,
                    "nodeType": "Return",
                    "src": "5968:17:2"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 737,
                        "name": "certifiedEmailFile",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 717,
                        "src": "6011:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_FileInterface_$6917",
                          "typeString": "contract FileInterface"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_FileInterface_$6917",
                          "typeString": "contract FileInterface"
                        }
                      ],
                      "id": 736,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "6003:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 738,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6003:27:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 706,
                  "id": 739,
                  "nodeType": "Return",
                  "src": "5996:34:2"
                }
              ]
            },
            "documentation": null,
            "id": 741,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getFile",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 703,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 702,
                  "name": "certificateId",
                  "nodeType": "VariableDeclaration",
                  "scope": 741,
                  "src": "5672:27:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 701,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5672:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5662:43:2"
            },
            "returnParameters": {
              "id": 706,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 705,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 741,
                  "src": "5751:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 704,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5751:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5750:9:2"
            },
            "scope": 874,
            "src": "5646:391:2",
            "stateMutability": "view",
            "superFunction": 6681,
            "visibility": "public"
          },
          {
            "body": {
              "id": 749,
              "nodeType": "Block",
              "src": "6129:45:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 746,
                      "name": "certificatesId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 354,
                      "src": "6146:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                        "typeString": "string storage ref[] storage ref"
                      }
                    },
                    "id": 747,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "6146:21:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 745,
                  "id": 748,
                  "nodeType": "Return",
                  "src": "6139:28:2"
                }
              ]
            },
            "documentation": null,
            "id": 750,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getCertificatesSize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 742,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6071:2:2"
            },
            "returnParameters": {
              "id": 745,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 744,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 750,
                  "src": "6119:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 743,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "6119:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6118:6:2"
            },
            "scope": 874,
            "src": "6043:131:2",
            "stateMutability": "view",
            "superFunction": 6686,
            "visibility": "public"
          },
          {
            "body": {
              "id": 804,
              "nodeType": "Block",
              "src": "6357:591:2",
              "statements": [
                {
                  "assignments": [
                    762
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 762,
                      "name": "contractToNofify",
                      "nodeType": "VariableDeclaration",
                      "scope": 804,
                      "src": "6367:24:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 761,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "6367:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 763,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6367:24:2"
                },
                {
                  "assignments": [
                    765
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 765,
                      "name": "notificationIndex",
                      "nodeType": "VariableDeclaration",
                      "scope": 804,
                      "src": "6401:22:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 764,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6401:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 767,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 766,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "6426:1:2",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6401:26:2"
                },
                {
                  "body": {
                    "id": 797,
                    "nodeType": "Block",
                    "src": "6441:461:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 774,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 768,
                            "name": "contractToNofify",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 762,
                            "src": "6455:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 771,
                                "name": "notifiersKey",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 752,
                                "src": "6512:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 772,
                                "name": "notificationIndex",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 765,
                                "src": "6526:17:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 769,
                                "name": "userContract",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 358,
                                "src": "6474:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_SignaturitUserInterface_$7251",
                                  "typeString": "contract SignaturitUserInterface"
                                }
                              },
                              "id": 770,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "getAddressArrayAttribute",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7220,
                              "src": "6474:37:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_string_memory_ptr_$_t_uint256_$returns$_t_address_$",
                                "typeString": "function (string memory,uint256) view external returns (address)"
                              }
                            },
                            "id": 773,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6474:70:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "6455:89:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 775,
                        "nodeType": "ExpressionStatement",
                        "src": "6455:89:2"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 777,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": true,
                          "src": "6558:19:2",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 776,
                            "name": "notificationIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 765,
                            "src": "6560:17:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 778,
                        "nodeType": "ExpressionStatement",
                        "src": "6558:19:2"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 783,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 779,
                            "name": "contractToNofify",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 762,
                            "src": "6596:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 781,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "6624:1:2",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 780,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "6616:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 782,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6616:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "6596:30:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 796,
                        "nodeType": "IfStatement",
                        "src": "6592:300:2",
                        "trueBody": {
                          "id": 795,
                          "nodeType": "Block",
                          "src": "6628:264:2",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "hexValue": "6e6f7469667928737472696e672c6164647265737329",
                                        "id": 789,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "string",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "6738:24:2",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_stringliteral_e71e6576031f7526f2cb12010c629f7a2c29216b3a4c963863ce995a950c0e48",
                                          "typeString": "literal_string \"notify(string,address)\""
                                        },
                                        "value": "notify(string,address)"
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 790,
                                        "name": "createdEvent",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 754,
                                        "src": "6788:12:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_string_memory_ptr",
                                          "typeString": "string memory"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 791,
                                        "name": "adrToNotify",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 756,
                                        "src": "6826:11:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_stringliteral_e71e6576031f7526f2cb12010c629f7a2c29216b3a4c963863ce995a950c0e48",
                                          "typeString": "literal_string \"notify(string,address)\""
                                        },
                                        {
                                          "typeIdentifier": "t_string_memory_ptr",
                                          "typeString": "string memory"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 787,
                                        "name": "abi",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7291,
                                        "src": "6689:3:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_abi",
                                          "typeString": "abi"
                                        }
                                      },
                                      "id": 788,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "encodeWithSignature",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "6689:23:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                        "typeString": "function (string memory) pure returns (bytes memory)"
                                      }
                                    },
                                    "id": 792,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "6689:170:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 784,
                                    "name": "contractToNofify",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 762,
                                    "src": "6646:16:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "id": 786,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "call",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "6646:21:2",
                                  "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": 793,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6646:231:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                  "typeString": "tuple(bool,bytes memory)"
                                }
                              },
                              "id": 794,
                              "nodeType": "ExpressionStatement",
                              "src": "6646:231:2"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 802,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 798,
                      "name": "contractToNofify",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 762,
                      "src": "6910:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 800,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6938:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 799,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "6930:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 801,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6930:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "6910:30:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 803,
                  "nodeType": "DoWhileStatement",
                  "src": "6438:504:2"
                }
              ]
            },
            "documentation": null,
            "id": 805,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 759,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 758,
                  "name": "signaturitOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 433,
                  "src": "6338:14:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6338:14:2"
              }
            ],
            "name": "notifyEntityEvent",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 757,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 752,
                  "name": "notifiersKey",
                  "nodeType": "VariableDeclaration",
                  "scope": 805,
                  "src": "6217:26:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 751,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "6217:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 754,
                  "name": "createdEvent",
                  "nodeType": "VariableDeclaration",
                  "scope": 805,
                  "src": "6253:26:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 753,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "6253:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 756,
                  "name": "adrToNotify",
                  "nodeType": "VariableDeclaration",
                  "scope": 805,
                  "src": "6289:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 755,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6289:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6207:107:2"
            },
            "returnParameters": {
              "id": 760,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6357:0:2"
            },
            "scope": 874,
            "src": "6180:768:2",
            "stateMutability": "nonpayable",
            "superFunction": 6695,
            "visibility": "public"
          },
          {
            "body": {
              "id": 822,
              "nodeType": "Block",
              "src": "7081:74:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 820,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 813,
                            "name": "certificates",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 362,
                            "src": "7106:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_$_t_contract$_CertificateInterface_$6588_$",
                              "typeString": "mapping(string memory => contract CertificateInterface)"
                            }
                          },
                          "id": 815,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 814,
                            "name": "certificateId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 807,
                            "src": "7119:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "7106:27:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                            "typeString": "contract CertificateInterface"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                            "typeString": "contract CertificateInterface"
                          }
                        ],
                        "id": 812,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "7098:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 816,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7098:36:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 818,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7146:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 817,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "7138:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 819,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7138:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "7098:50:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 811,
                  "id": 821,
                  "nodeType": "Return",
                  "src": "7091:57:2"
                }
              ]
            },
            "documentation": null,
            "id": 823,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_certificateExist",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 808,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 807,
                  "name": "certificateId",
                  "nodeType": "VariableDeclaration",
                  "scope": 823,
                  "src": "6991:27:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 806,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "6991:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6981:43:2"
            },
            "returnParameters": {
              "id": 811,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 810,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 823,
                  "src": "7071:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 809,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7071:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7070:6:2"
            },
            "scope": 874,
            "src": "6955:200:2",
            "stateMutability": "view",
            "superFunction": 6702,
            "visibility": "private"
          },
          {
            "body": {
              "id": 872,
              "nodeType": "Block",
              "src": "7288:641:2",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 831,
                        "name": "certificateId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 825,
                        "src": "7320:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 830,
                      "name": "_certificateExist",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 823,
                      "src": "7302:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (string memory) view returns (bool)"
                      }
                    },
                    "id": 832,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7302:32:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 837,
                  "nodeType": "IfStatement",
                  "src": "7298:84:2",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 833,
                        "name": "certificates",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 362,
                        "src": "7355:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_string_memory_$_t_contract$_CertificateInterface_$6588_$",
                          "typeString": "mapping(string memory => contract CertificateInterface)"
                        }
                      },
                      "id": 835,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 834,
                        "name": "certificateId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 825,
                        "src": "7368:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "7355:27:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                        "typeString": "contract CertificateInterface"
                      }
                    },
                    "functionReturnParameters": 829,
                    "id": 836,
                    "nodeType": "Return",
                    "src": "7348:34:2"
                  }
                },
                {
                  "assignments": [
                    839,
                    841
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 839,
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 872,
                      "src": "7407:12:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 838,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "7407:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 841,
                      "name": "returnData",
                      "nodeType": "VariableDeclaration",
                      "scope": 872,
                      "src": "7433:23:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 840,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "7433:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 851,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "6465706c6f79436572746966696361746528737472696e672c6164647265737329",
                            "id": 846,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7545:35:2",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_547952cfdbafeaa4664364bdc2bc14e0203513b5aa6a932dfc4fbf5fa105f83c",
                              "typeString": "literal_string \"deployCertificate(string,address)\""
                            },
                            "value": "deployCertificate(string,address)"
                          },
                          {
                            "argumentTypes": null,
                            "id": 847,
                            "name": "certificateId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 825,
                            "src": "7598:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 848,
                            "name": "deployer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 341,
                            "src": "7629:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_547952cfdbafeaa4664364bdc2bc14e0203513b5aa6a932dfc4fbf5fa105f83c",
                              "typeString": "literal_string \"deployCertificate(string,address)\""
                            },
                            {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 844,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7291,
                            "src": "7504:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 845,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "7504:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 849,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7504:147:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 842,
                        "name": "deployer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 341,
                        "src": "7469:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 843,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "delegatecall",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "7469:21:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) returns (bool,bytes memory)"
                      }
                    },
                    "id": 850,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7469:192:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7393:268:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 853,
                        "name": "success",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 839,
                        "src": "7693:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4572726f72207768696c65206465706c6f79696e67206365727469666963617465",
                        "id": 854,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7714:35:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4afeec33e607f96cbbdc012e6a0b64a8340fbfeca316004e68951f7459fff3f8",
                          "typeString": "literal_string \"Error while deploying certificate\""
                        },
                        "value": "Error while deploying certificate"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4afeec33e607f96cbbdc012e6a0b64a8340fbfeca316004e68951f7459fff3f8",
                          "typeString": "literal_string \"Error while deploying certificate\""
                        }
                      ],
                      "id": 852,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7307,
                        7308
                      ],
                      "referencedDeclaration": 7308,
                      "src": "7672:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 855,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7672:87:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 856,
                  "nodeType": "ExpressionStatement",
                  "src": "7672:87:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 866,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 857,
                        "name": "certificates",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 362,
                        "src": "7770:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_string_memory_$_t_contract$_CertificateInterface_$6588_$",
                          "typeString": "mapping(string memory => contract CertificateInterface)"
                        }
                      },
                      "id": 859,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 858,
                        "name": "certificateId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 825,
                        "src": "7783:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7770:27:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                        "typeString": "contract CertificateInterface"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 863,
                              "name": "returnData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 841,
                              "src": "7856:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 861,
                              "name": "Utils",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7289,
                              "src": "7834:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Utils_$7289_$",
                                "typeString": "type(library Utils)"
                              }
                            },
                            "id": 862,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_bytesToAddress",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7273,
                            "src": "7834:21:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_address_$",
                              "typeString": "function (bytes memory) pure returns (address)"
                            }
                          },
                          "id": 864,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7834:33:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 860,
                        "name": "CertificateInterface",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6588,
                        "src": "7800:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_CertificateInterface_$6588_$",
                          "typeString": "type(contract CertificateInterface)"
                        }
                      },
                      "id": 865,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7800:77:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                        "typeString": "contract CertificateInterface"
                      }
                    },
                    "src": "7770:107:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                      "typeString": "contract CertificateInterface"
                    }
                  },
                  "id": 867,
                  "nodeType": "ExpressionStatement",
                  "src": "7770:107:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 868,
                      "name": "certificates",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 362,
                      "src": "7895:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_string_memory_$_t_contract$_CertificateInterface_$6588_$",
                        "typeString": "mapping(string memory => contract CertificateInterface)"
                      }
                    },
                    "id": 870,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 869,
                      "name": "certificateId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 825,
                      "src": "7908:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7895:27:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                      "typeString": "contract CertificateInterface"
                    }
                  },
                  "functionReturnParameters": 829,
                  "id": 871,
                  "nodeType": "Return",
                  "src": "7888:34:2"
                }
              ]
            },
            "documentation": null,
            "id": 873,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getCertificate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 826,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 825,
                  "name": "certificateId",
                  "nodeType": "VariableDeclaration",
                  "scope": 873,
                  "src": "7195:27:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 824,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "7195:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7185:43:2"
            },
            "returnParameters": {
              "id": 829,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 828,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 873,
                  "src": "7262:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                    "typeString": "contract CertificateInterface"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 827,
                    "name": "CertificateInterface",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 6588,
                    "src": "7262:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                      "typeString": "contract CertificateInterface"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7261:22:2"
            },
            "scope": 874,
            "src": "7161:768:2",
            "stateMutability": "nonpayable",
            "superFunction": 6709,
            "visibility": "private"
          }
        ],
        "scope": 875,
        "src": "324:7607:2"
      }
    ],
    "src": "0:7932:2"
  },
  "legacyAST": {
    "absolutePath": "/home/administrator/workspace/signaturit-solidity-contracts/contracts/CertifiedEmail.sol",
    "exportedSymbols": {
      "CertifiedEmail": [
        874
      ]
    },
    "id": 875,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 305,
        "literals": [
          "solidity",
          "<",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:2"
      },
      {
        "absolutePath": "/home/administrator/workspace/signaturit-solidity-contracts/contracts/interfaces/CertifiedEmailInterface.sol",
        "file": "./interfaces/CertifiedEmailInterface.sol",
        "id": 306,
        "nodeType": "ImportDirective",
        "scope": 875,
        "sourceUnit": 6711,
        "src": "57:50:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/administrator/workspace/signaturit-solidity-contracts/contracts/interfaces/SignaturitUserInterface.sol",
        "file": "./interfaces/SignaturitUserInterface.sol",
        "id": 307,
        "nodeType": "ImportDirective",
        "scope": 875,
        "sourceUnit": 7252,
        "src": "108:50:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/administrator/workspace/signaturit-solidity-contracts/contracts/interfaces/CertificateInterface.sol",
        "file": "./interfaces/CertificateInterface.sol",
        "id": 308,
        "nodeType": "ImportDirective",
        "scope": 875,
        "sourceUnit": 6589,
        "src": "159:47:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/administrator/workspace/signaturit-solidity-contracts/contracts/interfaces/EventInterface.sol",
        "file": "./interfaces/EventInterface.sol",
        "id": 309,
        "nodeType": "ImportDirective",
        "scope": 875,
        "sourceUnit": 6892,
        "src": "207:41:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/administrator/workspace/signaturit-solidity-contracts/contracts/interfaces/FileInterface.sol",
        "file": "./interfaces/FileInterface.sol",
        "id": 310,
        "nodeType": "ImportDirective",
        "scope": 875,
        "sourceUnit": 6918,
        "src": "249:40:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/administrator/workspace/signaturit-solidity-contracts/contracts/libraries/Utils.sol",
        "file": "./libraries/Utils.sol",
        "id": 311,
        "nodeType": "ImportDirective",
        "scope": 875,
        "sourceUnit": 7290,
        "src": "290:31:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 312,
              "name": "CertifiedEmailInterface",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6710,
              "src": "351:23:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CertifiedEmailInterface_$6710",
                "typeString": "contract CertifiedEmailInterface"
              }
            },
            "id": 313,
            "nodeType": "InheritanceSpecifier",
            "src": "351:23:2"
          }
        ],
        "contractDependencies": [
          6710
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 874,
        "linearizedBaseContracts": [
          874,
          6710
        ],
        "name": "CertifiedEmail",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 316,
            "name": "CERTIFIED_EMAIL_CREATED_EVENT",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "381:90:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 314,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "381:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "6365727469666965645f656d61696c2e636f6e74726163742e63726561746564",
              "id": 315,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "437:34:2",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_ae5b77f70831a789b8fd4a912091a91a55780b1a05636a18add16c7002080c26",
                "typeString": "literal_string \"certified_email.contract.created\""
              },
              "value": "certified_email.contract.created"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 319,
            "name": "CERTIFICATE_CREATED_EVENT",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "477:82:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 317,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "477:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "63657274696669636174652e636f6e74726163742e63726561746564",
              "id": 318,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "529:30:2",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_60f55e549ede8476eef03c6c242f3f428cb14f442cf41e08e5091b8acc5bd485",
                "typeString": "literal_string \"certificate.contract.created\""
              },
              "value": "certificate.contract.created"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 322,
            "name": "FILE_CREATED_EVENT",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "565:68:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 320,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "565:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "66696c652e636f6e74726163742e63726561746564",
              "id": 321,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "610:23:2",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_2233a27e702ee6162cc2e308200369bccc6b94a4aee0e31589d2f43a31c28a19",
                "typeString": "literal_string \"file.contract.created\""
              },
              "value": "file.contract.created"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 325,
            "name": "EVENT_CREATED_EVENT",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "639:70:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 323,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "639:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "6576656e742e636f6e74726163742e63726561746564",
              "id": 324,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "685:24:2",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_940d087e88f9b637f99eb8adf4909f7a72371a7de914372d49d6ef145f5d420a",
                "typeString": "literal_string \"event.contract.created\""
              },
              "value": "event.contract.created"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 328,
            "name": "CERTIFIED_EMAIL_NOTIFIERS_KEY",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "716:83:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 326,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "716:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "6365727469666965642d656d61696c2d6e6f74696669657273",
              "id": 327,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "772:27:2",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_34af7359cfbe393aa940dd768d8b69e9f608525971e6ac17a87116d8bbdb6179",
                "typeString": "literal_string \"certified-email-notifiers\""
              },
              "value": "certified-email-notifiers"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 331,
            "name": "CERTIFICATE_NOTIFIERS_KEY",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "805:75:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 329,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "805:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "63657274696669636174652d6e6f74696669657273",
              "id": 330,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "857:23:2",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_e9de243ad0d1c8f5caa2f997b8265730fa86b037e7af2461b0b6837c6e81fe66",
                "typeString": "literal_string \"certificate-notifiers\""
              },
              "value": "certificate-notifiers"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 334,
            "name": "FILE_NOTIFIERS_KEY",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "886:61:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 332,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "886:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "66696c652d6e6f74696669657273",
              "id": 333,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "931:16:2",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_564d80aba11e51a3eff777d482df81c48f4da2423384618e7be1ee86ad1bfee6",
                "typeString": "literal_string \"file-notifiers\""
              },
              "value": "file-notifiers"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 337,
            "name": "EVENT_NOTIFIERS_KEY",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "953:63:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 335,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "953:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "6576656e742d6e6f74696669657273",
              "id": 336,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "999:17:2",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_b25bd55d22992cd8575c70596ff0d0e7a67a2b59c4214f4f8859fdd431ce46f0",
                "typeString": "literal_string \"event-notifiers\""
              },
              "value": "event-notifiers"
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 339,
            "name": "signaturit",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "1023:25:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 338,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1023:7:2",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 341,
            "name": "deployer",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "1054:23:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 340,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1054:7:2",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 343,
            "name": "owner",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "1083:20:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 342,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1083:7:2",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 345,
            "name": "id",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "1110:16:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 344,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1110:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 347,
            "name": "subjectHash",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "1132:25:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 346,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1132:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 349,
            "name": "bodyHash",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "1163:22:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 348,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1163:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 351,
            "name": "deliveryType",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "1191:26:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 350,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1191:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 354,
            "name": "certificatesId",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "1224:30:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
              "typeString": "string[]"
            },
            "typeName": {
              "baseType": {
                "id": 352,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "1224:6:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              },
              "id": 353,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "1224:8:2",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_string_storage_$dyn_storage_ptr",
                "typeString": "string[]"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 356,
            "name": "createdAt",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "1261:21:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 355,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "1261:4:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 358,
            "name": "userContract",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "1289:43:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_SignaturitUserInterface_$7251",
              "typeString": "contract SignaturitUserInterface"
            },
            "typeName": {
              "contractScope": null,
              "id": 357,
              "name": "SignaturitUserInterface",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 7251,
              "src": "1289:23:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SignaturitUserInterface_$7251",
                "typeString": "contract SignaturitUserInterface"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 362,
            "name": "certificates",
            "nodeType": "VariableDeclaration",
            "scope": 874,
            "src": "1339:60:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_string_memory_$_t_contract$_CertificateInterface_$6588_$",
              "typeString": "mapping(string => contract CertificateInterface)"
            },
            "typeName": {
              "id": 361,
              "keyType": {
                "id": 359,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "1347:6:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              },
              "nodeType": "Mapping",
              "src": "1339:39:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_string_memory_$_t_contract$_CertificateInterface_$6588_$",
                "typeString": "mapping(string => contract CertificateInterface)"
              },
              "valueType": {
                "contractScope": null,
                "id": 360,
                "name": "CertificateInterface",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 6588,
                "src": "1357:20:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                  "typeString": "contract CertificateInterface"
                }
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 420,
              "nodeType": "Block",
              "src": "1773:415:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 383,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 381,
                      "name": "id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 345,
                      "src": "1783:2:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 382,
                      "name": "certifiedEmailId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 364,
                      "src": "1788:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "1783:21:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 384,
                  "nodeType": "ExpressionStatement",
                  "src": "1783:21:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 387,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 385,
                      "name": "subjectHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 347,
                      "src": "1814:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 386,
                      "name": "certifiedEmailSubjectHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 366,
                      "src": "1828:25:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "1814:39:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 388,
                  "nodeType": "ExpressionStatement",
                  "src": "1814:39:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 391,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 389,
                      "name": "bodyHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 349,
                      "src": "1863:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 390,
                      "name": "certifiedEmailBodyHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 368,
                      "src": "1874:22:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "1863:33:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 392,
                  "nodeType": "ExpressionStatement",
                  "src": "1863:33:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 395,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 393,
                      "name": "deliveryType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 351,
                      "src": "1906:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 394,
                      "name": "certifiedEmailDeliveryType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 370,
                      "src": "1921:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "1906:41:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 396,
                  "nodeType": "ExpressionStatement",
                  "src": "1906:41:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 399,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 397,
                      "name": "createdAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 356,
                      "src": "1957:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 398,
                      "name": "certifiedEmailCreatedAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 372,
                      "src": "1969:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1957:35:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 400,
                  "nodeType": "ExpressionStatement",
                  "src": "1957:35:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 403,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 401,
                      "name": "deployer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 341,
                      "src": "2002:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 402,
                      "name": "certifiedEmailDeployer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 374,
                      "src": "2013:22:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2002:33:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 404,
                  "nodeType": "ExpressionStatement",
                  "src": "2002:33:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 408,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 405,
                      "name": "signaturit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 339,
                      "src": "2045:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 406,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7304,
                        "src": "2058:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 407,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2058:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "2045:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 409,
                  "nodeType": "ExpressionStatement",
                  "src": "2045:23:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 412,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 410,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 343,
                      "src": "2079:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 411,
                      "name": "certifiedEmailOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 376,
                      "src": "2087:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2079:27:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 413,
                  "nodeType": "ExpressionStatement",
                  "src": "2079:27:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 418,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 414,
                      "name": "userContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 358,
                      "src": "2117:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_SignaturitUserInterface_$7251",
                        "typeString": "contract SignaturitUserInterface"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 416,
                          "name": "userSmartContractAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 378,
                          "src": "2156:24:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 415,
                        "name": "SignaturitUserInterface",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7251,
                        "src": "2132:23:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_SignaturitUserInterface_$7251_$",
                          "typeString": "type(contract SignaturitUserInterface)"
                        }
                      },
                      "id": 417,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2132:49:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_SignaturitUserInterface_$7251",
                        "typeString": "contract SignaturitUserInterface"
                      }
                    },
                    "src": "2117:64:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SignaturitUserInterface_$7251",
                      "typeString": "contract SignaturitUserInterface"
                    }
                  },
                  "id": 419,
                  "nodeType": "ExpressionStatement",
                  "src": "2117:64:2"
                }
              ]
            },
            "documentation": null,
            "id": 421,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 379,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 364,
                  "name": "certifiedEmailId",
                  "nodeType": "VariableDeclaration",
                  "scope": 421,
                  "src": "1427:30:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 363,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1427:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 366,
                  "name": "certifiedEmailSubjectHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 421,
                  "src": "1467:39:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 365,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1467:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 368,
                  "name": "certifiedEmailBodyHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 421,
                  "src": "1516:36:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 367,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1516:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 370,
                  "name": "certifiedEmailDeliveryType",
                  "nodeType": "VariableDeclaration",
                  "scope": 421,
                  "src": "1562:40:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 369,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1562:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 372,
                  "name": "certifiedEmailCreatedAt",
                  "nodeType": "VariableDeclaration",
                  "scope": 421,
                  "src": "1612:28:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 371,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1612:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 374,
                  "name": "certifiedEmailDeployer",
                  "nodeType": "VariableDeclaration",
                  "scope": 421,
                  "src": "1650:30:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 373,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1650:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 376,
                  "name": "certifiedEmailOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 421,
                  "src": "1690:27:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 375,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1690:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 378,
                  "name": "userSmartContractAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 421,
                  "src": "1727:32:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 377,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1727:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1417:348:2"
            },
            "returnParameters": {
              "id": 380,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1773:0:2"
            },
            "scope": 874,
            "src": "1406:782:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 432,
              "nodeType": "Block",
              "src": "2221:146:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 427,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 424,
                            "name": "tx",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7316,
                            "src": "2252:2:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_transaction",
                              "typeString": "tx"
                            }
                          },
                          "id": 425,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "origin",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2252:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 426,
                          "name": "signaturit",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 339,
                          "src": "2265:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2252:23:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f6e6c79205369676e617475726974206163636f756e742063616e20706572666f726d207468697320616374696f6e",
                        "id": 428,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2289:49:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c4d39fb6c3ef76259aa8a9c7aa83179d818e17cba0db927afcdb36c571443b99",
                          "typeString": "literal_string \"Only Signaturit account can perform this action\""
                        },
                        "value": "Only Signaturit account can perform this action"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c4d39fb6c3ef76259aa8a9c7aa83179d818e17cba0db927afcdb36c571443b99",
                          "typeString": "literal_string \"Only Signaturit account can perform this action\""
                        }
                      ],
                      "id": 423,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7307,
                        7308
                      ],
                      "referencedDeclaration": 7308,
                      "src": "2231:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 429,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2231:117:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 430,
                  "nodeType": "ExpressionStatement",
                  "src": "2231:117:2"
                },
                {
                  "id": 431,
                  "nodeType": "PlaceholderStatement",
                  "src": "2359:1:2"
                }
              ]
            },
            "documentation": null,
            "id": 433,
            "name": "signaturitOnly",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 422,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2218:2:2"
            },
            "src": "2194:173:2",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 446,
              "nodeType": "Block",
              "src": "2441:111:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 439,
                        "name": "CERTIFIED_EMAIL_NOTIFIERS_KEY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 328,
                        "src": "2469:29:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 440,
                        "name": "CERTIFIED_EMAIL_CREATED_EVENT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 316,
                        "src": "2500:29:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 442,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7333,
                            "src": "2539:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CertifiedEmail_$874",
                              "typeString": "contract CertifiedEmail"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CertifiedEmail_$874",
                              "typeString": "contract CertifiedEmail"
                            }
                          ],
                          "id": 441,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2531:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 443,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2531:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 438,
                      "name": "notifyEntityEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        805
                      ],
                      "referencedDeclaration": 805,
                      "src": "2451:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_address_$returns$__$",
                        "typeString": "function (string memory,string memory,address)"
                      }
                    },
                    "id": 444,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2451:94:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 445,
                  "nodeType": "ExpressionStatement",
                  "src": "2451:94:2"
                }
              ]
            },
            "documentation": null,
            "id": 447,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 436,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 435,
                  "name": "signaturitOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 433,
                  "src": "2422:14:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2422:14:2"
              }
            ],
            "name": "notifyCreation",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 434,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2396:2:2"
            },
            "returnParameters": {
              "id": 437,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2441:0:2"
            },
            "scope": 874,
            "src": "2373:179:2",
            "stateMutability": "nonpayable",
            "superFunction": 6621,
            "visibility": "public"
          },
          {
            "body": {
              "id": 485,
              "nodeType": "Block",
              "src": "2739:298:2",
              "statements": [
                {
                  "assignments": [
                    459
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 459,
                      "name": "certificate",
                      "nodeType": "VariableDeclaration",
                      "scope": 485,
                      "src": "2749:32:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                        "typeString": "contract CertificateInterface"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 458,
                        "name": "CertificateInterface",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6588,
                        "src": "2749:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                          "typeString": "contract CertificateInterface"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 463,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 461,
                        "name": "certificateId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 449,
                        "src": "2800:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 460,
                      "name": "_getCertificate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 873,
                      "src": "2784:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$returns$_t_contract$_CertificateInterface_$6588_$",
                        "typeString": "function (string memory) returns (contract CertificateInterface)"
                      }
                    },
                    "id": 462,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2784:30:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                      "typeString": "contract CertificateInterface"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2749:65:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 467,
                        "name": "certificateOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 453,
                        "src": "2842:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 468,
                        "name": "certificateCreatedAt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 451,
                        "src": "2860:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 464,
                        "name": "certificate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 459,
                        "src": "2825:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                          "typeString": "contract CertificateInterface"
                        }
                      },
                      "id": 466,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "init",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6551,
                      "src": "2825:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 469,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2825:56:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 470,
                  "nodeType": "ExpressionStatement",
                  "src": "2825:56:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 474,
                        "name": "certificateId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 449,
                        "src": "2912:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 471,
                        "name": "certificatesId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 354,
                        "src": "2892:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                          "typeString": "string storage ref[] storage ref"
                        }
                      },
                      "id": 473,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2892:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_string_storage_$returns$_t_uint256_$",
                        "typeString": "function (string storage ref) returns (uint256)"
                      }
                    },
                    "id": 475,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2892:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 476,
                  "nodeType": "ExpressionStatement",
                  "src": "2892:34:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 478,
                        "name": "CERTIFICATE_NOTIFIERS_KEY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 331,
                        "src": "2955:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 479,
                        "name": "CERTIFICATE_CREATED_EVENT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 319,
                        "src": "2982:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 481,
                            "name": "certificate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 459,
                            "src": "3017:11:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                              "typeString": "contract CertificateInterface"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                              "typeString": "contract CertificateInterface"
                            }
                          ],
                          "id": 480,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3009:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 482,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3009:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 477,
                      "name": "notifyEntityEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        805
                      ],
                      "referencedDeclaration": 805,
                      "src": "2937:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_address_$returns$__$",
                        "typeString": "function (string memory,string memory,address)"
                      }
                    },
                    "id": 483,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2937:93:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 484,
                  "nodeType": "ExpressionStatement",
                  "src": "2937:93:2"
                }
              ]
            },
            "documentation": null,
            "id": 486,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 456,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 455,
                  "name": "signaturitOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 433,
                  "src": "2720:14:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2720:14:2"
              }
            ],
            "name": "createCertificate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 454,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 449,
                  "name": "certificateId",
                  "nodeType": "VariableDeclaration",
                  "scope": 486,
                  "src": "2594:27:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 448,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2594:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 451,
                  "name": "certificateCreatedAt",
                  "nodeType": "VariableDeclaration",
                  "scope": 486,
                  "src": "2631:25:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 450,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2631:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 453,
                  "name": "certificateOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 486,
                  "src": "2666:24:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 452,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2666:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2584:112:2"
            },
            "returnParameters": {
              "id": 457,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2739:0:2"
            },
            "scope": 874,
            "src": "2558:479:2",
            "stateMutability": "nonpayable",
            "superFunction": 6630,
            "visibility": "public"
          },
          {
            "body": {
              "id": 544,
              "nodeType": "Block",
              "src": "3280:564:2",
              "statements": [
                {
                  "assignments": [
                    502
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 502,
                      "name": "certificate",
                      "nodeType": "VariableDeclaration",
                      "scope": 544,
                      "src": "3290:32:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                        "typeString": "contract CertificateInterface"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 501,
                        "name": "CertificateInterface",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6588,
                        "src": "3290:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                          "typeString": "contract CertificateInterface"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 506,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 504,
                        "name": "certificateId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 488,
                        "src": "3341:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 503,
                      "name": "_getCertificate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 873,
                      "src": "3325:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$returns$_t_contract$_CertificateInterface_$6588_$",
                        "typeString": "function (string memory) returns (contract CertificateInterface)"
                      }
                    },
                    "id": 505,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3325:30:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                      "typeString": "contract CertificateInterface"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3290:65:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 510,
                        "name": "eventId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 490,
                        "src": "3403:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 511,
                        "name": "eventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 492,
                        "src": "3424:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 512,
                        "name": "eventUserAgent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 494,
                        "src": "3447:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 513,
                        "name": "eventCreatedAt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 496,
                        "src": "3475:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 507,
                        "name": "certificate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 502,
                        "src": "3366:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                          "typeString": "contract CertificateInterface"
                        }
                      },
                      "id": 509,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "createEvent",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6575,
                      "src": "3366:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (string memory,string memory,string memory,uint256) external"
                      }
                    },
                    "id": 514,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3366:133:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 515,
                  "nodeType": "ExpressionStatement",
                  "src": "3366:133:2"
                },
                {
                  "assignments": [
                    517
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 517,
                      "name": "certifiedEmailEvent",
                      "nodeType": "VariableDeclaration",
                      "scope": 544,
                      "src": "3510:34:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_EventInterface_$6891",
                        "typeString": "contract EventInterface"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 516,
                        "name": "EventInterface",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6891,
                        "src": "3510:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EventInterface_$6891",
                          "typeString": "contract EventInterface"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 524,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 521,
                            "name": "eventId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 490,
                            "src": "3583:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 519,
                            "name": "certificate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 502,
                            "src": "3562:11:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                              "typeString": "contract CertificateInterface"
                            }
                          },
                          "id": 520,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "getEvent",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6582,
                          "src": "3562:20:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_string_memory_ptr_$returns$_t_address_$",
                            "typeString": "function (string memory) view external returns (address)"
                          }
                        },
                        "id": 522,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3562:29:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 518,
                      "name": "EventInterface",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6891,
                      "src": "3547:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_EventInterface_$6891_$",
                        "typeString": "type(contract EventInterface)"
                      }
                    },
                    "id": 523,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3547:45:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_EventInterface_$6891",
                      "typeString": "contract EventInterface"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3510:82:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 532,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 527,
                              "name": "certifiedEmailEvent",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 517,
                              "src": "3632:19:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_EventInterface_$6891",
                                "typeString": "contract EventInterface"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_EventInterface_$6891",
                                "typeString": "contract EventInterface"
                              }
                            ],
                            "id": 526,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3624:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 528,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3624:28:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 530,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3664:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 529,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3656:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 531,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3656:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "3624:42:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4572726f72207768696c652072657472696576696e67206576656e742066726f6d206365727469666963617465",
                        "id": 533,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3680:47:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_98ec96d2a800dee2ee539c923d1c485436943d01cd1d1913059ea7bb7f84f327",
                          "typeString": "literal_string \"Error while retrieving event from certificate\""
                        },
                        "value": "Error while retrieving event from certificate"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_98ec96d2a800dee2ee539c923d1c485436943d01cd1d1913059ea7bb7f84f327",
                          "typeString": "literal_string \"Error while retrieving event from certificate\""
                        }
                      ],
                      "id": 525,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7307,
                        7308
                      ],
                      "referencedDeclaration": 7308,
                      "src": "3603:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 534,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3603:134:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 535,
                  "nodeType": "ExpressionStatement",
                  "src": "3603:134:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 537,
                        "name": "EVENT_NOTIFIERS_KEY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 337,
                        "src": "3766:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 538,
                        "name": "EVENT_CREATED_EVENT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 325,
                        "src": "3787:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 540,
                            "name": "certifiedEmailEvent",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 517,
                            "src": "3816:19:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_EventInterface_$6891",
                              "typeString": "contract EventInterface"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_EventInterface_$6891",
                              "typeString": "contract EventInterface"
                            }
                          ],
                          "id": 539,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3808:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 541,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3808:28:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 536,
                      "name": "notifyEntityEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        805
                      ],
                      "referencedDeclaration": 805,
                      "src": "3748:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_address_$returns$__$",
                        "typeString": "function (string memory,string memory,address)"
                      }
                    },
                    "id": 542,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3748:89:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 543,
                  "nodeType": "ExpressionStatement",
                  "src": "3748:89:2"
                }
              ]
            },
            "documentation": null,
            "id": 545,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 499,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 498,
                  "name": "signaturitOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 433,
                  "src": "3261:14:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3261:14:2"
              }
            ],
            "name": "createEvent",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 497,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 488,
                  "name": "certificateId",
                  "nodeType": "VariableDeclaration",
                  "scope": 545,
                  "src": "3073:27:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 487,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3073:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 490,
                  "name": "eventId",
                  "nodeType": "VariableDeclaration",
                  "scope": 545,
                  "src": "3110:21:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 489,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3110:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 492,
                  "name": "eventType",
                  "nodeType": "VariableDeclaration",
                  "scope": 545,
                  "src": "3141:23:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 491,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3141:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 494,
                  "name": "eventUserAgent",
                  "nodeType": "VariableDeclaration",
                  "scope": 545,
                  "src": "3174:28:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 493,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3174:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 496,
                  "name": "eventCreatedAt",
                  "nodeType": "VariableDeclaration",
                  "scope": 545,
                  "src": "3212:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 495,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3212:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3063:174:2"
            },
            "returnParameters": {
              "id": 500,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3280:0:2"
            },
            "scope": 874,
            "src": "3043:801:2",
            "stateMutability": "nonpayable",
            "superFunction": 6643,
            "visibility": "public"
          },
          {
            "body": {
              "id": 603,
              "nodeType": "Block",
              "src": "4100:542:2",
              "statements": [
                {
                  "assignments": [
                    563
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 563,
                      "name": "certificate",
                      "nodeType": "VariableDeclaration",
                      "scope": 603,
                      "src": "4110:32:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                        "typeString": "contract CertificateInterface"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 562,
                        "name": "CertificateInterface",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6588,
                        "src": "4110:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                          "typeString": "contract CertificateInterface"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 567,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 565,
                        "name": "certificateId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 547,
                        "src": "4161:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 564,
                      "name": "_getCertificate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 873,
                      "src": "4145:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$returns$_t_contract$_CertificateInterface_$6588_$",
                        "typeString": "function (string memory) returns (contract CertificateInterface)"
                      }
                    },
                    "id": 566,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4145:30:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                      "typeString": "contract CertificateInterface"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4110:65:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 571,
                        "name": "fileHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 549,
                        "src": "4222:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 572,
                        "name": "fileId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 551,
                        "src": "4244:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 573,
                        "name": "fileName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 553,
                        "src": "4264:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 574,
                        "name": "fileCreatedAt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 555,
                        "src": "4286:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 575,
                        "name": "fileSize",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 557,
                        "src": "4313:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 568,
                        "name": "certificate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 563,
                        "src": "4186:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                          "typeString": "contract CertificateInterface"
                        }
                      },
                      "id": 570,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "createFile",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6564,
                      "src": "4186:22:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (string memory,string memory,string memory,uint256,uint256) external"
                      }
                    },
                    "id": 576,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4186:145:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 577,
                  "nodeType": "ExpressionStatement",
                  "src": "4186:145:2"
                },
                {
                  "assignments": [
                    579
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 579,
                      "name": "certifiedEmailFile",
                      "nodeType": "VariableDeclaration",
                      "scope": 603,
                      "src": "4342:32:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_FileInterface_$6917",
                        "typeString": "contract FileInterface"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 578,
                        "name": "FileInterface",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6917,
                        "src": "4342:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_FileInterface_$6917",
                          "typeString": "contract FileInterface"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 583,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 580,
                        "name": "certificate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 563,
                        "src": "4377:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                          "typeString": "contract CertificateInterface"
                        }
                      },
                      "id": 581,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "file",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6540,
                      "src": "4377:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_FileInterface_$6917_$",
                        "typeString": "function () view external returns (contract FileInterface)"
                      }
                    },
                    "id": 582,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4377:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_FileInterface_$6917",
                      "typeString": "contract FileInterface"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4342:53:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 591,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 586,
                              "name": "certifiedEmailFile",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 579,
                              "src": "4435:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_FileInterface_$6917",
                                "typeString": "contract FileInterface"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_FileInterface_$6917",
                                "typeString": "contract FileInterface"
                              }
                            ],
                            "id": 585,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4427:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 587,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4427:27:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 589,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4466:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 588,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4458:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 590,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4458:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "4427:41:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4572726f72207768696c652072657472696576696e672066696c652066726f6d206365727469666963617465",
                        "id": 592,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4482:46:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_facd9cab22b0355a7475ad61b5343b0bc56202c3a9709de253f694b746dafde6",
                          "typeString": "literal_string \"Error while retrieving file from certificate\""
                        },
                        "value": "Error while retrieving file from certificate"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_facd9cab22b0355a7475ad61b5343b0bc56202c3a9709de253f694b746dafde6",
                          "typeString": "literal_string \"Error while retrieving file from certificate\""
                        }
                      ],
                      "id": 584,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7307,
                        7308
                      ],
                      "referencedDeclaration": 7308,
                      "src": "4406:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 593,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4406:132:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 594,
                  "nodeType": "ExpressionStatement",
                  "src": "4406:132:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 596,
                        "name": "FILE_NOTIFIERS_KEY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 334,
                        "src": "4567:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 597,
                        "name": "FILE_CREATED_EVENT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 322,
                        "src": "4587:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 599,
                            "name": "certifiedEmailFile",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 579,
                            "src": "4615:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_FileInterface_$6917",
                              "typeString": "contract FileInterface"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_FileInterface_$6917",
                              "typeString": "contract FileInterface"
                            }
                          ],
                          "id": 598,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4607:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 600,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4607:27:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 595,
                      "name": "notifyEntityEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        805
                      ],
                      "referencedDeclaration": 805,
                      "src": "4549:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_address_$returns$__$",
                        "typeString": "function (string memory,string memory,address)"
                      }
                    },
                    "id": 601,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4549:86:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 602,
                  "nodeType": "ExpressionStatement",
                  "src": "4549:86:2"
                }
              ]
            },
            "documentation": null,
            "id": 604,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 560,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 559,
                  "name": "signaturitOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 433,
                  "src": "4081:14:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4081:14:2"
              }
            ],
            "name": "createFile",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 558,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 547,
                  "name": "certificateId",
                  "nodeType": "VariableDeclaration",
                  "scope": 604,
                  "src": "3879:27:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 546,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3879:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 549,
                  "name": "fileHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 604,
                  "src": "3916:22:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 548,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3916:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 551,
                  "name": "fileId",
                  "nodeType": "VariableDeclaration",
                  "scope": 604,
                  "src": "3948:20:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 550,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3948:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 553,
                  "name": "fileName",
                  "nodeType": "VariableDeclaration",
                  "scope": 604,
                  "src": "3978:22:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 552,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3978:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 555,
                  "name": "fileCreatedAt",
                  "nodeType": "VariableDeclaration",
                  "scope": 604,
                  "src": "4010:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 554,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "4010:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 557,
                  "name": "fileSize",
                  "nodeType": "VariableDeclaration",
                  "scope": 604,
                  "src": "4038:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 556,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "4038:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3869:188:2"
            },
            "returnParameters": {
              "id": 561,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4100:0:2"
            },
            "scope": 874,
            "src": "3850:792:2",
            "stateMutability": "nonpayable",
            "superFunction": 6658,
            "visibility": "public"
          },
          {
            "body": {
              "id": 626,
              "nodeType": "Block",
              "src": "4774:127:2",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 614,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "4788:33:2",
                    "subExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 612,
                          "name": "certificateId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 606,
                          "src": "4807:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        ],
                        "id": 611,
                        "name": "_certificateExist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 823,
                        "src": "4789:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$_t_bool_$",
                          "typeString": "function (string memory) view returns (bool)"
                        }
                      },
                      "id": 613,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4789:32:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 619,
                  "nodeType": "IfStatement",
                  "src": "4784:56:2",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 616,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4838:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 615,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4830:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 617,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4830:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "functionReturnParameters": 610,
                    "id": 618,
                    "nodeType": "Return",
                    "src": "4823:17:2"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 621,
                          "name": "certificates",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 362,
                          "src": "4866:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_string_memory_$_t_contract$_CertificateInterface_$6588_$",
                            "typeString": "mapping(string memory => contract CertificateInterface)"
                          }
                        },
                        "id": 623,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 622,
                          "name": "certificateId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 606,
                          "src": "4879:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "4866:27:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                          "typeString": "contract CertificateInterface"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                          "typeString": "contract CertificateInterface"
                        }
                      ],
                      "id": 620,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "4858:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 624,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4858:36:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 610,
                  "id": 625,
                  "nodeType": "Return",
                  "src": "4851:43:2"
                }
              ]
            },
            "documentation": null,
            "id": 627,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getCertificate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 607,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 606,
                  "name": "certificateId",
                  "nodeType": "VariableDeclaration",
                  "scope": 627,
                  "src": "4682:27:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 605,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "4682:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4672:43:2"
            },
            "returnParameters": {
              "id": 610,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 609,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 627,
                  "src": "4761:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 608,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4761:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4760:9:2"
            },
            "scope": 874,
            "src": "4648:253:2",
            "stateMutability": "view",
            "superFunction": 6665,
            "visibility": "public"
          },
          {
            "body": {
              "id": 653,
              "nodeType": "Block",
              "src": "5022:135:2",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 639,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 634,
                      "name": "index",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 629,
                      "src": "5036:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 638,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 635,
                          "name": "certificatesId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 354,
                          "src": "5044:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                            "typeString": "string storage ref[] storage ref"
                          }
                        },
                        "id": 636,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5044:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 637,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5068:1:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "5044:25:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5036:33:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 644,
                  "nodeType": "IfStatement",
                  "src": "5032:56:2",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 641,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5086:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 640,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5078:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 642,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5078:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "functionReturnParameters": 633,
                    "id": 643,
                    "nodeType": "Return",
                    "src": "5071:17:2"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 646,
                          "name": "certificates",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 362,
                          "src": "5114:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_string_memory_$_t_contract$_CertificateInterface_$6588_$",
                            "typeString": "mapping(string memory => contract CertificateInterface)"
                          }
                        },
                        "id": 650,
                        "indexExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 647,
                            "name": "certificatesId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 354,
                            "src": "5127:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                              "typeString": "string storage ref[] storage ref"
                            }
                          },
                          "id": 649,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 648,
                            "name": "index",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 629,
                            "src": "5142:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "5127:21:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5114:35:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                          "typeString": "contract CertificateInterface"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                          "typeString": "contract CertificateInterface"
                        }
                      ],
                      "id": 645,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "5106:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 651,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5106:44:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 633,
                  "id": 652,
                  "nodeType": "Return",
                  "src": "5099:51:2"
                }
              ]
            },
            "documentation": null,
            "id": 654,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getCertificateByIndex",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 630,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 629,
                  "name": "index",
                  "nodeType": "VariableDeclaration",
                  "scope": 654,
                  "src": "4947:10:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 628,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "4947:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4937:26:2"
            },
            "returnParameters": {
              "id": 633,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 632,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 654,
                  "src": "5009:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 631,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5009:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5008:9:2"
            },
            "scope": 874,
            "src": "4907:250:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 699,
              "nodeType": "Block",
              "src": "5314:326:2",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 666,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "5328:33:2",
                    "subExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 664,
                          "name": "certificateId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 656,
                          "src": "5347:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        ],
                        "id": 663,
                        "name": "_certificateExist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 823,
                        "src": "5329:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$_t_bool_$",
                          "typeString": "function (string memory) view returns (bool)"
                        }
                      },
                      "id": 665,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5329:32:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 671,
                  "nodeType": "IfStatement",
                  "src": "5324:56:2",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 668,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5378:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 667,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5370:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 669,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5370:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "functionReturnParameters": 662,
                    "id": 670,
                    "nodeType": "Return",
                    "src": "5363:17:2"
                  }
                },
                {
                  "assignments": [
                    673
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 673,
                      "name": "certifiedEmailEvent",
                      "nodeType": "VariableDeclaration",
                      "scope": 699,
                      "src": "5391:34:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_EventInterface_$6891",
                        "typeString": "contract EventInterface"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 672,
                        "name": "EventInterface",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6891,
                        "src": "5391:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EventInterface_$6891",
                          "typeString": "contract EventInterface"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 682,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 679,
                            "name": "eventId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 658,
                            "src": "5493:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 675,
                              "name": "certificates",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 362,
                              "src": "5443:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_string_memory_$_t_contract$_CertificateInterface_$6588_$",
                                "typeString": "mapping(string memory => contract CertificateInterface)"
                              }
                            },
                            "id": 677,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 676,
                              "name": "certificateId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 656,
                              "src": "5456:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "5443:27:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                              "typeString": "contract CertificateInterface"
                            }
                          },
                          "id": 678,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "getEvent",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6582,
                          "src": "5443:36:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_string_memory_ptr_$returns$_t_address_$",
                            "typeString": "function (string memory) view external returns (address)"
                          }
                        },
                        "id": 680,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5443:67:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 674,
                      "name": "EventInterface",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6891,
                      "src": "5428:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_EventInterface_$6891_$",
                        "typeString": "type(contract EventInterface)"
                      }
                    },
                    "id": 681,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5428:83:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_EventInterface_$6891",
                      "typeString": "contract EventInterface"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5391:120:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 689,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 684,
                          "name": "certifiedEmailEvent",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 673,
                          "src": "5534:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_EventInterface_$6891",
                            "typeString": "contract EventInterface"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_EventInterface_$6891",
                            "typeString": "contract EventInterface"
                          }
                        ],
                        "id": 683,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5526:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 685,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5526:28:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 687,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5566:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 686,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5558:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 688,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5558:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "5526:42:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 694,
                  "nodeType": "IfStatement",
                  "src": "5522:65:2",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 691,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5585:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 690,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5577:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 692,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5577:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "functionReturnParameters": 662,
                    "id": 693,
                    "nodeType": "Return",
                    "src": "5570:17:2"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 696,
                        "name": "certifiedEmailEvent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 673,
                        "src": "5613:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EventInterface_$6891",
                          "typeString": "contract EventInterface"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_EventInterface_$6891",
                          "typeString": "contract EventInterface"
                        }
                      ],
                      "id": 695,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "5605:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 697,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5605:28:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 662,
                  "id": 698,
                  "nodeType": "Return",
                  "src": "5598:35:2"
                }
              ]
            },
            "documentation": null,
            "id": 700,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getEvent",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 659,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 656,
                  "name": "certificateId",
                  "nodeType": "VariableDeclaration",
                  "scope": 700,
                  "src": "5191:27:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 655,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5191:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 658,
                  "name": "eventId",
                  "nodeType": "VariableDeclaration",
                  "scope": 700,
                  "src": "5228:21:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 657,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5228:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5181:74:2"
            },
            "returnParameters": {
              "id": 662,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 661,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 700,
                  "src": "5301:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 660,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5301:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5300:9:2"
            },
            "scope": 874,
            "src": "5164:476:2",
            "stateMutability": "view",
            "superFunction": 6674,
            "visibility": "public"
          },
          {
            "body": {
              "id": 740,
              "nodeType": "Block",
              "src": "5764:273:2",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 710,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "5778:33:2",
                    "subExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 708,
                          "name": "certificateId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 702,
                          "src": "5797:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        ],
                        "id": 707,
                        "name": "_certificateExist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 823,
                        "src": "5779:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$_t_bool_$",
                          "typeString": "function (string memory) view returns (bool)"
                        }
                      },
                      "id": 709,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5779:32:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 715,
                  "nodeType": "IfStatement",
                  "src": "5774:56:2",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 712,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5828:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 711,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5820:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 713,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5820:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "functionReturnParameters": 706,
                    "id": 714,
                    "nodeType": "Return",
                    "src": "5813:17:2"
                  }
                },
                {
                  "assignments": [
                    717
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 717,
                      "name": "certifiedEmailFile",
                      "nodeType": "VariableDeclaration",
                      "scope": 740,
                      "src": "5841:32:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_FileInterface_$6917",
                        "typeString": "contract FileInterface"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 716,
                        "name": "FileInterface",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6917,
                        "src": "5841:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_FileInterface_$6917",
                          "typeString": "contract FileInterface"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 723,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 718,
                          "name": "certificates",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 362,
                          "src": "5876:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_string_memory_$_t_contract$_CertificateInterface_$6588_$",
                            "typeString": "mapping(string memory => contract CertificateInterface)"
                          }
                        },
                        "id": 720,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 719,
                          "name": "certificateId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 702,
                          "src": "5889:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5876:27:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                          "typeString": "contract CertificateInterface"
                        }
                      },
                      "id": 721,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "file",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6540,
                      "src": "5876:32:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_FileInterface_$6917_$",
                        "typeString": "function () view external returns (contract FileInterface)"
                      }
                    },
                    "id": 722,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5876:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_FileInterface_$6917",
                      "typeString": "contract FileInterface"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5841:69:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 730,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 725,
                          "name": "certifiedEmailFile",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 717,
                          "src": "5933:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_FileInterface_$6917",
                            "typeString": "contract FileInterface"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_FileInterface_$6917",
                            "typeString": "contract FileInterface"
                          }
                        ],
                        "id": 724,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5925:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 726,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5925:27:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 728,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5964:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 727,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5956:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 729,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5956:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "5925:41:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 735,
                  "nodeType": "IfStatement",
                  "src": "5921:64:2",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 732,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5983:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 731,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5975:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 733,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5975:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "functionReturnParameters": 706,
                    "id": 734,
                    "nodeType": "Return",
                    "src": "5968:17:2"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 737,
                        "name": "certifiedEmailFile",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 717,
                        "src": "6011:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_FileInterface_$6917",
                          "typeString": "contract FileInterface"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_FileInterface_$6917",
                          "typeString": "contract FileInterface"
                        }
                      ],
                      "id": 736,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "6003:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 738,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6003:27:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 706,
                  "id": 739,
                  "nodeType": "Return",
                  "src": "5996:34:2"
                }
              ]
            },
            "documentation": null,
            "id": 741,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getFile",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 703,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 702,
                  "name": "certificateId",
                  "nodeType": "VariableDeclaration",
                  "scope": 741,
                  "src": "5672:27:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 701,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5672:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5662:43:2"
            },
            "returnParameters": {
              "id": 706,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 705,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 741,
                  "src": "5751:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 704,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5751:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5750:9:2"
            },
            "scope": 874,
            "src": "5646:391:2",
            "stateMutability": "view",
            "superFunction": 6681,
            "visibility": "public"
          },
          {
            "body": {
              "id": 749,
              "nodeType": "Block",
              "src": "6129:45:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 746,
                      "name": "certificatesId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 354,
                      "src": "6146:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_string_storage_$dyn_storage",
                        "typeString": "string storage ref[] storage ref"
                      }
                    },
                    "id": 747,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "6146:21:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 745,
                  "id": 748,
                  "nodeType": "Return",
                  "src": "6139:28:2"
                }
              ]
            },
            "documentation": null,
            "id": 750,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getCertificatesSize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 742,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6071:2:2"
            },
            "returnParameters": {
              "id": 745,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 744,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 750,
                  "src": "6119:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 743,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "6119:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6118:6:2"
            },
            "scope": 874,
            "src": "6043:131:2",
            "stateMutability": "view",
            "superFunction": 6686,
            "visibility": "public"
          },
          {
            "body": {
              "id": 804,
              "nodeType": "Block",
              "src": "6357:591:2",
              "statements": [
                {
                  "assignments": [
                    762
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 762,
                      "name": "contractToNofify",
                      "nodeType": "VariableDeclaration",
                      "scope": 804,
                      "src": "6367:24:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 761,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "6367:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 763,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6367:24:2"
                },
                {
                  "assignments": [
                    765
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 765,
                      "name": "notificationIndex",
                      "nodeType": "VariableDeclaration",
                      "scope": 804,
                      "src": "6401:22:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 764,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6401:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 767,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 766,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "6426:1:2",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6401:26:2"
                },
                {
                  "body": {
                    "id": 797,
                    "nodeType": "Block",
                    "src": "6441:461:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 774,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 768,
                            "name": "contractToNofify",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 762,
                            "src": "6455:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 771,
                                "name": "notifiersKey",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 752,
                                "src": "6512:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 772,
                                "name": "notificationIndex",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 765,
                                "src": "6526:17:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 769,
                                "name": "userContract",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 358,
                                "src": "6474:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_SignaturitUserInterface_$7251",
                                  "typeString": "contract SignaturitUserInterface"
                                }
                              },
                              "id": 770,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "getAddressArrayAttribute",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7220,
                              "src": "6474:37:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_string_memory_ptr_$_t_uint256_$returns$_t_address_$",
                                "typeString": "function (string memory,uint256) view external returns (address)"
                              }
                            },
                            "id": 773,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6474:70:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "6455:89:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 775,
                        "nodeType": "ExpressionStatement",
                        "src": "6455:89:2"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 777,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": true,
                          "src": "6558:19:2",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 776,
                            "name": "notificationIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 765,
                            "src": "6560:17:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 778,
                        "nodeType": "ExpressionStatement",
                        "src": "6558:19:2"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 783,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 779,
                            "name": "contractToNofify",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 762,
                            "src": "6596:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 781,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "6624:1:2",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 780,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "6616:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 782,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6616:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "6596:30:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 796,
                        "nodeType": "IfStatement",
                        "src": "6592:300:2",
                        "trueBody": {
                          "id": 795,
                          "nodeType": "Block",
                          "src": "6628:264:2",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "hexValue": "6e6f7469667928737472696e672c6164647265737329",
                                        "id": 789,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "string",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "6738:24:2",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_stringliteral_e71e6576031f7526f2cb12010c629f7a2c29216b3a4c963863ce995a950c0e48",
                                          "typeString": "literal_string \"notify(string,address)\""
                                        },
                                        "value": "notify(string,address)"
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 790,
                                        "name": "createdEvent",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 754,
                                        "src": "6788:12:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_string_memory_ptr",
                                          "typeString": "string memory"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 791,
                                        "name": "adrToNotify",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 756,
                                        "src": "6826:11:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_stringliteral_e71e6576031f7526f2cb12010c629f7a2c29216b3a4c963863ce995a950c0e48",
                                          "typeString": "literal_string \"notify(string,address)\""
                                        },
                                        {
                                          "typeIdentifier": "t_string_memory_ptr",
                                          "typeString": "string memory"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 787,
                                        "name": "abi",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7291,
                                        "src": "6689:3:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_abi",
                                          "typeString": "abi"
                                        }
                                      },
                                      "id": 788,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "encodeWithSignature",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "6689:23:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                        "typeString": "function (string memory) pure returns (bytes memory)"
                                      }
                                    },
                                    "id": 792,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "6689:170:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 784,
                                    "name": "contractToNofify",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 762,
                                    "src": "6646:16:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "id": 786,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "call",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "6646:21:2",
                                  "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": 793,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6646:231:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                  "typeString": "tuple(bool,bytes memory)"
                                }
                              },
                              "id": 794,
                              "nodeType": "ExpressionStatement",
                              "src": "6646:231:2"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 802,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 798,
                      "name": "contractToNofify",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 762,
                      "src": "6910:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 800,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6938:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 799,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "6930:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 801,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6930:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "6910:30:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 803,
                  "nodeType": "DoWhileStatement",
                  "src": "6438:504:2"
                }
              ]
            },
            "documentation": null,
            "id": 805,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 759,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 758,
                  "name": "signaturitOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 433,
                  "src": "6338:14:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6338:14:2"
              }
            ],
            "name": "notifyEntityEvent",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 757,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 752,
                  "name": "notifiersKey",
                  "nodeType": "VariableDeclaration",
                  "scope": 805,
                  "src": "6217:26:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 751,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "6217:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 754,
                  "name": "createdEvent",
                  "nodeType": "VariableDeclaration",
                  "scope": 805,
                  "src": "6253:26:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 753,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "6253:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 756,
                  "name": "adrToNotify",
                  "nodeType": "VariableDeclaration",
                  "scope": 805,
                  "src": "6289:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 755,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6289:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6207:107:2"
            },
            "returnParameters": {
              "id": 760,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6357:0:2"
            },
            "scope": 874,
            "src": "6180:768:2",
            "stateMutability": "nonpayable",
            "superFunction": 6695,
            "visibility": "public"
          },
          {
            "body": {
              "id": 822,
              "nodeType": "Block",
              "src": "7081:74:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 820,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 813,
                            "name": "certificates",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 362,
                            "src": "7106:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_string_memory_$_t_contract$_CertificateInterface_$6588_$",
                              "typeString": "mapping(string memory => contract CertificateInterface)"
                            }
                          },
                          "id": 815,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 814,
                            "name": "certificateId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 807,
                            "src": "7119:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "7106:27:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                            "typeString": "contract CertificateInterface"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                            "typeString": "contract CertificateInterface"
                          }
                        ],
                        "id": 812,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "7098:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 816,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7098:36:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 818,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7146:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 817,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "7138:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 819,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7138:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "7098:50:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 811,
                  "id": 821,
                  "nodeType": "Return",
                  "src": "7091:57:2"
                }
              ]
            },
            "documentation": null,
            "id": 823,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_certificateExist",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 808,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 807,
                  "name": "certificateId",
                  "nodeType": "VariableDeclaration",
                  "scope": 823,
                  "src": "6991:27:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 806,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "6991:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6981:43:2"
            },
            "returnParameters": {
              "id": 811,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 810,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 823,
                  "src": "7071:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 809,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7071:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7070:6:2"
            },
            "scope": 874,
            "src": "6955:200:2",
            "stateMutability": "view",
            "superFunction": 6702,
            "visibility": "private"
          },
          {
            "body": {
              "id": 872,
              "nodeType": "Block",
              "src": "7288:641:2",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 831,
                        "name": "certificateId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 825,
                        "src": "7320:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 830,
                      "name": "_certificateExist",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 823,
                      "src": "7302:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (string memory) view returns (bool)"
                      }
                    },
                    "id": 832,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7302:32:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 837,
                  "nodeType": "IfStatement",
                  "src": "7298:84:2",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 833,
                        "name": "certificates",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 362,
                        "src": "7355:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_string_memory_$_t_contract$_CertificateInterface_$6588_$",
                          "typeString": "mapping(string memory => contract CertificateInterface)"
                        }
                      },
                      "id": 835,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 834,
                        "name": "certificateId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 825,
                        "src": "7368:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "7355:27:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                        "typeString": "contract CertificateInterface"
                      }
                    },
                    "functionReturnParameters": 829,
                    "id": 836,
                    "nodeType": "Return",
                    "src": "7348:34:2"
                  }
                },
                {
                  "assignments": [
                    839,
                    841
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 839,
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 872,
                      "src": "7407:12:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 838,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "7407:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 841,
                      "name": "returnData",
                      "nodeType": "VariableDeclaration",
                      "scope": 872,
                      "src": "7433:23:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 840,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "7433:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 851,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "6465706c6f79436572746966696361746528737472696e672c6164647265737329",
                            "id": 846,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7545:35:2",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_547952cfdbafeaa4664364bdc2bc14e0203513b5aa6a932dfc4fbf5fa105f83c",
                              "typeString": "literal_string \"deployCertificate(string,address)\""
                            },
                            "value": "deployCertificate(string,address)"
                          },
                          {
                            "argumentTypes": null,
                            "id": 847,
                            "name": "certificateId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 825,
                            "src": "7598:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 848,
                            "name": "deployer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 341,
                            "src": "7629:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_547952cfdbafeaa4664364bdc2bc14e0203513b5aa6a932dfc4fbf5fa105f83c",
                              "typeString": "literal_string \"deployCertificate(string,address)\""
                            },
                            {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 844,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7291,
                            "src": "7504:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 845,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "7504:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 849,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7504:147:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 842,
                        "name": "deployer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 341,
                        "src": "7469:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 843,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "delegatecall",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "7469:21:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) returns (bool,bytes memory)"
                      }
                    },
                    "id": 850,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7469:192:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7393:268:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 853,
                        "name": "success",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 839,
                        "src": "7693:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4572726f72207768696c65206465706c6f79696e67206365727469666963617465",
                        "id": 854,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7714:35:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4afeec33e607f96cbbdc012e6a0b64a8340fbfeca316004e68951f7459fff3f8",
                          "typeString": "literal_string \"Error while deploying certificate\""
                        },
                        "value": "Error while deploying certificate"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4afeec33e607f96cbbdc012e6a0b64a8340fbfeca316004e68951f7459fff3f8",
                          "typeString": "literal_string \"Error while deploying certificate\""
                        }
                      ],
                      "id": 852,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7307,
                        7308
                      ],
                      "referencedDeclaration": 7308,
                      "src": "7672:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 855,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7672:87:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 856,
                  "nodeType": "ExpressionStatement",
                  "src": "7672:87:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 866,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 857,
                        "name": "certificates",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 362,
                        "src": "7770:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_string_memory_$_t_contract$_CertificateInterface_$6588_$",
                          "typeString": "mapping(string memory => contract CertificateInterface)"
                        }
                      },
                      "id": 859,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 858,
                        "name": "certificateId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 825,
                        "src": "7783:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7770:27:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                        "typeString": "contract CertificateInterface"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 863,
                              "name": "returnData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 841,
                              "src": "7856:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 861,
                              "name": "Utils",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7289,
                              "src": "7834:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Utils_$7289_$",
                                "typeString": "type(library Utils)"
                              }
                            },
                            "id": 862,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_bytesToAddress",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7273,
                            "src": "7834:21:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_address_$",
                              "typeString": "function (bytes memory) pure returns (address)"
                            }
                          },
                          "id": 864,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7834:33:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 860,
                        "name": "CertificateInterface",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6588,
                        "src": "7800:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_CertificateInterface_$6588_$",
                          "typeString": "type(contract CertificateInterface)"
                        }
                      },
                      "id": 865,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7800:77:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                        "typeString": "contract CertificateInterface"
                      }
                    },
                    "src": "7770:107:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                      "typeString": "contract CertificateInterface"
                    }
                  },
                  "id": 867,
                  "nodeType": "ExpressionStatement",
                  "src": "7770:107:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 868,
                      "name": "certificates",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 362,
                      "src": "7895:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_string_memory_$_t_contract$_CertificateInterface_$6588_$",
                        "typeString": "mapping(string memory => contract CertificateInterface)"
                      }
                    },
                    "id": 870,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 869,
                      "name": "certificateId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 825,
                      "src": "7908:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7895:27:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                      "typeString": "contract CertificateInterface"
                    }
                  },
                  "functionReturnParameters": 829,
                  "id": 871,
                  "nodeType": "Return",
                  "src": "7888:34:2"
                }
              ]
            },
            "documentation": null,
            "id": 873,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getCertificate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 826,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 825,
                  "name": "certificateId",
                  "nodeType": "VariableDeclaration",
                  "scope": 873,
                  "src": "7195:27:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 824,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "7195:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7185:43:2"
            },
            "returnParameters": {
              "id": 829,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 828,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 873,
                  "src": "7262:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                    "typeString": "contract CertificateInterface"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 827,
                    "name": "CertificateInterface",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 6588,
                    "src": "7262:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CertificateInterface_$6588",
                      "typeString": "contract CertificateInterface"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7261:22:2"
            },
            "scope": 874,
            "src": "7161:768:2",
            "stateMutability": "nonpayable",
            "superFunction": 6709,
            "visibility": "private"
          }
        ],
        "scope": 875,
        "src": "324:7607:2"
      }
    ],
    "src": "0:7932:2"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.0+commit.1d4f565a.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "2.0.3",
  "updatedAt": "2020-01-15T10:55:50.260Z"
}