{
  "_format": "hh-sol-artifact-1",
  "contractName": "BlockEvidence",
  "sourceName": "contracts/Logic/MountainPeriodLifeCycle/BlockEvidence.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_defaultAdmin",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_operator",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "detailBlockHash",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "detailBlockHeight",
          "type": "uint256"
        }
      ],
      "name": "DetailSaved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "overviewBlockHash",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "overviewBlockHeight",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "detailReferenceBlockHash",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "detailReferenceBlockHeight",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "blocksAhead",
          "type": "uint256"
        }
      ],
      "name": "OverviewAndDetailReferenceSaved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previousAdminRole",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newAdminRole",
          "type": "bytes32"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "OPERATION_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getAdminMembers",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_key",
          "type": "string"
        }
      ],
      "name": "getBlockForDetail",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_key",
          "type": "string"
        }
      ],
      "name": "getBlockForOverviewAndDetailReference",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getOperatorMembers",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "getRoleMember",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleMemberCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_account",
          "type": "address"
        }
      ],
      "name": "revokeDefaultAdminRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_account",
          "type": "address"
        }
      ],
      "name": "revokeOperationRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_key",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "_jewelDetailBlockHash",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "_jewelDetailBlockHeight",
          "type": "uint256"
        }
      ],
      "name": "saveBlockForDetail",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_key",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "_jewelOverviewBlockHash",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "_jewelOverviewBlockHeight",
          "type": "uint256"
        },
        {
          "internalType": "string",
          "name": "_jewelDetailReferenceBlockHash",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "_jewelDetailReferenceBlockHeight",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_blocksAheadForJewelDetail",
          "type": "uint256"
        }
      ],
      "name": "saveBlockForOverviewAndDetailReference",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_account",
          "type": "address"
        }
      ],
      "name": "setDefaultAdminRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_account",
          "type": "address"
        }
      ],
      "name": "setOperationRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_account",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_newAccount",
          "type": "address"
        }
      ],
      "name": "switchDefaultAdminRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_account",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_newAccount",
          "type": "address"
        }
      ],
      "name": "switchOperationRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b5060405162001f9238038062001f928339810160408190526200003491620001f7565b6200004160008362000075565b6200006d7f20296b01d0b6bd176f0c1e29644934c0047abf080dae43609a1bbc09e39bafdb8262000075565b50506200022f565b62000081828262000085565b5050565b6200009c8282620000c860201b6200109e1760201c565b6000828152600160209081526040909120620000c39183906200112262000168821b17901c565b505050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000081576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620001243390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006200017f836001600160a01b03841662000188565b90505b92915050565b6000818152600183016020526040812054620001d15750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000182565b50600062000182565b80516001600160a01b0381168114620001f257600080fd5b919050565b600080604083850312156200020b57600080fd5b6200021683620001da565b91506200022660208401620001da565b90509250929050565b611d53806200023f6000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c8063989f9434116100b8578063c19010a71161007c578063c19010a7146102d1578063c33fd556146102e4578063c818922e146102f7578063ca15c8731461030a578063d547741f1461031d578063f52b9b671461033057600080fd5b8063989f943414610277578063a217fddf1461029b578063a2793993146102a3578063ba3387fb146102b6578063c0e3e0d4146102c957600080fd5b80635773172d1161010a5780635773172d146101dd5780635815fcbd146101f0578063590bab38146102115780638545d8df146102245780639010d07c1461023957806391d148541461026457600080fd5b806301ffc9a714610147578063248a9ca31461016f5780632bb77846146101a05780632f2ff15d146101b557806336568abe146101ca575b600080fd5b61015a6101553660046115ca565b610343565b60405190151581526020015b60405180910390f35b61019261017d3660046115f4565b60009081526020819052604090206001015490565b604051908152602001610166565b6101a861036e565b604051610166919061160d565b6101c86101c3366004611676565b610418565b005b6101c86101d8366004611676565b610442565b6101c86101eb3660046116a2565b6104c5565b6102036101fe3660046116ff565b610501565b604051610166929190611791565b6101c861021f3660046117b3565b6105e2565b610192600080516020611cfe83398151915281565b61024c6102473660046117dd565b610699565b6040516001600160a01b039091168152602001610166565b61015a610272366004611676565b6106b8565b61028a6102853660046116ff565b6106e1565b6040516101669594939291906117ff565b610192600081565b6101c86102b136600461183f565b6108b9565b6101c86102c43660046117b3565b610baf565b6101a8610c4c565b6101c86102df3660046116a2565b610d0b565b6101c86102f23660046116a2565b610d47565b6101c86103053660046118b3565b610d90565b6101926103183660046115f4565b611019565b6101c861032b366004611676565b611030565b6101c861033e3660046116a2565b611055565b60006001600160e01b03198216635a05180f60e01b1480610368575061036882611137565b92915050565b6060600061037b81611019565b67ffffffffffffffff81111561039357610393611969565b6040519080825280602002602001820160405280156103bc578160200160208202803683370190505b50905060005b8151811015610412576103d6600082610699565b8282815181106103e8576103e861197f565b6001600160a01b03909216602092830291909101909101528061040a816119ab565b9150506103c2565b50919050565b6000828152602081905260409020600101546104338161116c565b61043d8383611179565b505050565b6001600160a01b03811633146104b75760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6104c1828261119b565b5050565b60006104d08161116c565b6001600160a01b0382166104f65760405162461bcd60e51b81526004016104ae906119c4565b6104c160008361119b565b6060600080600485856040516105189291906119fb565b908152602001604051809103902060405180604001604052908160008201805461054190611a0b565b80601f016020809104026020016040519081016040528092919081815260200182805461056d90611a0b565b80156105ba5780601f1061058f576101008083540402835291602001916105ba565b820191906000526020600020905b81548152906001019060200180831161059d57829003601f168201915b50505091835250506001919091015460209182015281519101519093509150505b9250929050565b60006105ed8161116c565b6001600160a01b0383166106135760405162461bcd60e51b81526004016104ae906119c4565b6001600160a01b0382166106695760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e6577206163636f756e742061646472657373000000000060448201526064016104ae565b610681600080516020611cfe8339815191528461119b565b61043d600080516020611cfe833981519152836111bd565b60008281526001602052604081206106b190836111c7565b9392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600060606000806000600288886040516106fe9291906119fb565b908152602001604051809103902060405180604001604052908160008201805461072790611a0b565b80601f016020809104026020016040519081016040528092919081815260200182805461075390611a0b565b80156107a05780601f10610775576101008083540402835291602001916107a0565b820191906000526020600020905b81548152906001019060200180831161078357829003601f168201915b5050505050815260200160018201548152505090506000600389896040516107c99291906119fb565b90815260200160405180910390206040518060600160405290816000820180546107f290611a0b565b80601f016020809104026020016040519081016040528092919081815260200182805461081e90611a0b565b801561086b5780601f106108405761010080835404028352916020019161086b565b820191906000526020600020905b81548152906001019060200180831161084e57829003601f168201915b50505050508152602001600182015481526020016002820154815250509050816000015182602001518260000151836020015184604001519650965096509650965050509295509295909350565b600080516020611cfe8339815191526108d18161116c565b600386866040516108e39291906119fb565b90815260405190819003602001902080546108fd90611a0b565b90506000036109595760405162461bcd60e51b815260206004820152602260248201527f44657461696c5265666572656e6365426c6f636b496e666f206e6f7420736176604482015261195960f21b60648201526084016104ae565b6004868660405161096b9291906119fb565b908152604051908190036020019020805461098590611a0b565b1590506109d45760405162461bcd60e51b815260206004820152601d60248201527f44657461696c426c6f636b496e666f20616c726561647920736176656400000060448201526064016104ae565b81600387876040516109e79291906119fb565b90815260200160405180910390206002015460038888604051610a0b9291906119fb565b908152602001604051809103902060010154610a279190611a3f565b14610ae65760405162461bcd60e51b815260206004820152607760248201527f44657461696c5265666572656e6365426c6f636b496e666f2e626c6f636b486560448201527f69676874202b2044657461696c5265666572656e6365426c6f636b496e666f2e60648201527f626c6f636b734168656164206973206e6f7420657175616c20746f204465746160848201527f696c426c6f636b496e666f2e626c6f636b48656967687400000000000000000060a482015260c4016104ae565b6040805160606020601f87018190040282018101835291810185815290918291908790879081908501838280828437600092019190915250505090825250602001839052604051600490610b3d90899089906119fb565b90815260405190819003602001902081518190610b5a9082611aa0565b50602082015181600101559050507f5c63a163a4b1c4f07967466d0908f1d040ad3d27f815c9229bbb9b1fe3fc5fdf8686868686604051610b9f959493929190611b89565b60405180910390a1505050505050565b6000610bba8161116c565b6001600160a01b038316610be05760405162461bcd60e51b81526004016104ae906119c4565b6001600160a01b038216610c365760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e6577206163636f756e742061646472657373000000000060448201526064016104ae565b610c4160008461119b565b61043d6000836111bd565b60606000610c67600080516020611cfe833981519152611019565b67ffffffffffffffff811115610c7f57610c7f611969565b604051908082528060200260200182016040528015610ca8578160200160208202803683370190505b50905060005b815181101561041257610ccf600080516020611cfe83398151915282610699565b828281518110610ce157610ce161197f565b6001600160a01b039092166020928302919091019091015280610d03816119ab565b915050610cae565b6000610d168161116c565b6001600160a01b038216610d3c5760405162461bcd60e51b81526004016104ae906119c4565b6104c16000836111bd565b6000610d528161116c565b6001600160a01b038216610d785760405162461bcd60e51b81526004016104ae906119c4565b6104c1600080516020611cfe833981519152836111bd565b600080516020611cfe833981519152610da88161116c565b60028a8a604051610dba9291906119fb565b9081526040519081900360200190208054610dd490611a0b565b159050610e235760405162461bcd60e51b815260206004820152601f60248201527f4f76657276696577426c6f636b496e666f20616c72656164792073617665640060448201526064016104ae565b60038a8a604051610e359291906119fb565b9081526040519081900360200190208054610e4f90611a0b565b159050610ead5760405162461bcd60e51b815260206004820152602660248201527f44657461696c5265666572656e6365426c6f636b496e666f20616c7265616479604482015265081cd85d995960d21b60648201526084016104ae565b6040805160606020601f8b018190040282018101835291810189815290918291908b908b9081908501838280828437600092019190915250505090825250602001879052604051600290610f04908d908d906119fb565b90815260405190819003602001902081518190610f219082611aa0565b5060208201518160010155905050604051806060016040528086868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525060208101859052604090810184905251600390610f93908d908d906119fb565b90815260405190819003602001902081518190610fb09082611aa0565b5060208201516001820155604091820151600290910155517fbf0ce7d613c1ccecbea488eb624c6b6aae69fe8df27a0ef2cd5ace0d62d1a09390611005908c908c908c908c908c908c908c908c908c90611bc3565b60405180910390a150505050505050505050565b6000818152600160205260408120610368906111d3565b60008281526020819052604090206001015461104b8161116c565b61043d838361119b565b60006110608161116c565b6001600160a01b0382166110865760405162461bcd60e51b81526004016104ae906119c4565b6104c1600080516020611cfe8339815191528361119b565b6110a882826106b8565b6104c1576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556110de3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006106b1836001600160a01b0384166111dd565b60006001600160e01b03198216637965db0b60e01b148061036857506301ffc9a760e01b6001600160e01b0319831614610368565b611176813361122c565b50565b611183828261109e565b600082815260016020526040902061043d9082611122565b6111a58282611285565b600082815260016020526040902061043d90826112ea565b6104c18282611179565b60006106b183836112ff565b6000610368825490565b600081815260018301602052604081205461122457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610368565b506000610368565b61123682826106b8565b6104c15761124381611329565b61124e83602061133b565b60405160200161125f929190611c1e565b60408051601f198184030181529082905262461bcd60e51b82526104ae91600401611c93565b61128f82826106b8565b156104c1576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006106b1836001600160a01b0384166114d7565b60008260000182815481106113165761131661197f565b9060005260206000200154905092915050565b60606103686001600160a01b03831660145b6060600061134a836002611ca6565b611355906002611a3f565b67ffffffffffffffff81111561136d5761136d611969565b6040519080825280601f01601f191660200182016040528015611397576020820181803683370190505b509050600360fc1b816000815181106113b2576113b261197f565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106113e1576113e161197f565b60200101906001600160f81b031916908160001a9053506000611405846002611ca6565b611410906001611a3f565b90505b6001811115611488576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106114445761144461197f565b1a60f81b82828151811061145a5761145a61197f565b60200101906001600160f81b031916908160001a90535060049490941c9361148181611cbd565b9050611413565b5083156106b15760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016104ae565b600081815260018301602052604081205480156115c05760006114fb600183611cd4565b855490915060009061150f90600190611cd4565b905081811461157457600086600001828154811061152f5761152f61197f565b90600052602060002001549050808760000184815481106115525761155261197f565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061158557611585611ce7565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610368565b6000915050610368565b6000602082840312156115dc57600080fd5b81356001600160e01b0319811681146106b157600080fd5b60006020828403121561160657600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b8181101561164e5783516001600160a01b031683529284019291840191600101611629565b50909695505050505050565b80356001600160a01b038116811461167157600080fd5b919050565b6000806040838503121561168957600080fd5b823591506116996020840161165a565b90509250929050565b6000602082840312156116b457600080fd5b6106b18261165a565b60008083601f8401126116cf57600080fd5b50813567ffffffffffffffff8111156116e757600080fd5b6020830191508360208285010111156105db57600080fd5b6000806020838503121561171257600080fd5b823567ffffffffffffffff81111561172957600080fd5b611735858286016116bd565b90969095509350505050565b60005b8381101561175c578181015183820152602001611744565b50506000910152565b6000815180845261177d816020860160208601611741565b601f01601f19169290920160200192915050565b6040815260006117a46040830185611765565b90508260208301529392505050565b600080604083850312156117c657600080fd5b6117cf8361165a565b91506116996020840161165a565b600080604083850312156117f057600080fd5b50508035926020909101359150565b60a08152600061181260a0830188611765565b866020840152828103604084015261182a8187611765565b60608401959095525050608001529392505050565b60008060008060006060868803121561185757600080fd5b853567ffffffffffffffff8082111561186f57600080fd5b61187b89838a016116bd565b9097509550602088013591508082111561189457600080fd5b506118a1888289016116bd565b96999598509660400135949350505050565b600080600080600080600080600060c08a8c0312156118d157600080fd5b893567ffffffffffffffff808211156118e957600080fd5b6118f58d838e016116bd565b909b50995060208c013591508082111561190e57600080fd5b61191a8d838e016116bd565b909950975060408c0135965060608c013591508082111561193a57600080fd5b506119478c828d016116bd565b9a9d999c50979a96999598959660808101359660a09091013595509350505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016119bd576119bd611995565b5060010190565b60208082526017908201527f696e76616c6964206163636f756e742061646472657373000000000000000000604082015260600190565b8183823760009101908152919050565b600181811c90821680611a1f57607f821691505b60208210810361041257634e487b7160e01b600052602260045260246000fd5b8082018082111561036857610368611995565b601f82111561043d57600081815260208120601f850160051c81016020861015611a795750805b601f850160051c820191505b81811015611a9857828155600101611a85565b505050505050565b815167ffffffffffffffff811115611aba57611aba611969565b611ace81611ac88454611a0b565b84611a52565b602080601f831160018114611b035760008415611aeb5750858301515b600019600386901b1c1916600185901b178555611a98565b600085815260208120601f198616915b82811015611b3257888601518255948401946001909101908401611b13565b5085821015611b505787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b606081526000611b9d606083018789611b60565b8281036020840152611bb0818688611b60565b9150508260408301529695505050505050565b60c081526000611bd760c083018b8d611b60565b8281036020840152611bea818a8c611b60565b90508760408401528281036060840152611c05818789611b60565b6080840195909552505060a00152979650505050505050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611c56816017850160208801611741565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611c87816028840160208801611741565b01602801949350505050565b6020815260006106b16020830184611765565b808202811582820484141761036857610368611995565b600081611ccc57611ccc611995565b506000190190565b8181038181111561036857610368611995565b634e487b7160e01b600052603160045260246000fdfe20296b01d0b6bd176f0c1e29644934c0047abf080dae43609a1bbc09e39bafdba264697066735822122086c98f6d8061196c0118099b5f7eba174a217b13b59f8c80821331bf99a3d35264736f6c63430008120033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101425760003560e01c8063989f9434116100b8578063c19010a71161007c578063c19010a7146102d1578063c33fd556146102e4578063c818922e146102f7578063ca15c8731461030a578063d547741f1461031d578063f52b9b671461033057600080fd5b8063989f943414610277578063a217fddf1461029b578063a2793993146102a3578063ba3387fb146102b6578063c0e3e0d4146102c957600080fd5b80635773172d1161010a5780635773172d146101dd5780635815fcbd146101f0578063590bab38146102115780638545d8df146102245780639010d07c1461023957806391d148541461026457600080fd5b806301ffc9a714610147578063248a9ca31461016f5780632bb77846146101a05780632f2ff15d146101b557806336568abe146101ca575b600080fd5b61015a6101553660046115ca565b610343565b60405190151581526020015b60405180910390f35b61019261017d3660046115f4565b60009081526020819052604090206001015490565b604051908152602001610166565b6101a861036e565b604051610166919061160d565b6101c86101c3366004611676565b610418565b005b6101c86101d8366004611676565b610442565b6101c86101eb3660046116a2565b6104c5565b6102036101fe3660046116ff565b610501565b604051610166929190611791565b6101c861021f3660046117b3565b6105e2565b610192600080516020611cfe83398151915281565b61024c6102473660046117dd565b610699565b6040516001600160a01b039091168152602001610166565b61015a610272366004611676565b6106b8565b61028a6102853660046116ff565b6106e1565b6040516101669594939291906117ff565b610192600081565b6101c86102b136600461183f565b6108b9565b6101c86102c43660046117b3565b610baf565b6101a8610c4c565b6101c86102df3660046116a2565b610d0b565b6101c86102f23660046116a2565b610d47565b6101c86103053660046118b3565b610d90565b6101926103183660046115f4565b611019565b6101c861032b366004611676565b611030565b6101c861033e3660046116a2565b611055565b60006001600160e01b03198216635a05180f60e01b1480610368575061036882611137565b92915050565b6060600061037b81611019565b67ffffffffffffffff81111561039357610393611969565b6040519080825280602002602001820160405280156103bc578160200160208202803683370190505b50905060005b8151811015610412576103d6600082610699565b8282815181106103e8576103e861197f565b6001600160a01b03909216602092830291909101909101528061040a816119ab565b9150506103c2565b50919050565b6000828152602081905260409020600101546104338161116c565b61043d8383611179565b505050565b6001600160a01b03811633146104b75760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6104c1828261119b565b5050565b60006104d08161116c565b6001600160a01b0382166104f65760405162461bcd60e51b81526004016104ae906119c4565b6104c160008361119b565b6060600080600485856040516105189291906119fb565b908152602001604051809103902060405180604001604052908160008201805461054190611a0b565b80601f016020809104026020016040519081016040528092919081815260200182805461056d90611a0b565b80156105ba5780601f1061058f576101008083540402835291602001916105ba565b820191906000526020600020905b81548152906001019060200180831161059d57829003601f168201915b50505091835250506001919091015460209182015281519101519093509150505b9250929050565b60006105ed8161116c565b6001600160a01b0383166106135760405162461bcd60e51b81526004016104ae906119c4565b6001600160a01b0382166106695760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e6577206163636f756e742061646472657373000000000060448201526064016104ae565b610681600080516020611cfe8339815191528461119b565b61043d600080516020611cfe833981519152836111bd565b60008281526001602052604081206106b190836111c7565b9392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600060606000806000600288886040516106fe9291906119fb565b908152602001604051809103902060405180604001604052908160008201805461072790611a0b565b80601f016020809104026020016040519081016040528092919081815260200182805461075390611a0b565b80156107a05780601f10610775576101008083540402835291602001916107a0565b820191906000526020600020905b81548152906001019060200180831161078357829003601f168201915b5050505050815260200160018201548152505090506000600389896040516107c99291906119fb565b90815260200160405180910390206040518060600160405290816000820180546107f290611a0b565b80601f016020809104026020016040519081016040528092919081815260200182805461081e90611a0b565b801561086b5780601f106108405761010080835404028352916020019161086b565b820191906000526020600020905b81548152906001019060200180831161084e57829003601f168201915b50505050508152602001600182015481526020016002820154815250509050816000015182602001518260000151836020015184604001519650965096509650965050509295509295909350565b600080516020611cfe8339815191526108d18161116c565b600386866040516108e39291906119fb565b90815260405190819003602001902080546108fd90611a0b565b90506000036109595760405162461bcd60e51b815260206004820152602260248201527f44657461696c5265666572656e6365426c6f636b496e666f206e6f7420736176604482015261195960f21b60648201526084016104ae565b6004868660405161096b9291906119fb565b908152604051908190036020019020805461098590611a0b565b1590506109d45760405162461bcd60e51b815260206004820152601d60248201527f44657461696c426c6f636b496e666f20616c726561647920736176656400000060448201526064016104ae565b81600387876040516109e79291906119fb565b90815260200160405180910390206002015460038888604051610a0b9291906119fb565b908152602001604051809103902060010154610a279190611a3f565b14610ae65760405162461bcd60e51b815260206004820152607760248201527f44657461696c5265666572656e6365426c6f636b496e666f2e626c6f636b486560448201527f69676874202b2044657461696c5265666572656e6365426c6f636b496e666f2e60648201527f626c6f636b734168656164206973206e6f7420657175616c20746f204465746160848201527f696c426c6f636b496e666f2e626c6f636b48656967687400000000000000000060a482015260c4016104ae565b6040805160606020601f87018190040282018101835291810185815290918291908790879081908501838280828437600092019190915250505090825250602001839052604051600490610b3d90899089906119fb565b90815260405190819003602001902081518190610b5a9082611aa0565b50602082015181600101559050507f5c63a163a4b1c4f07967466d0908f1d040ad3d27f815c9229bbb9b1fe3fc5fdf8686868686604051610b9f959493929190611b89565b60405180910390a1505050505050565b6000610bba8161116c565b6001600160a01b038316610be05760405162461bcd60e51b81526004016104ae906119c4565b6001600160a01b038216610c365760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e6577206163636f756e742061646472657373000000000060448201526064016104ae565b610c4160008461119b565b61043d6000836111bd565b60606000610c67600080516020611cfe833981519152611019565b67ffffffffffffffff811115610c7f57610c7f611969565b604051908082528060200260200182016040528015610ca8578160200160208202803683370190505b50905060005b815181101561041257610ccf600080516020611cfe83398151915282610699565b828281518110610ce157610ce161197f565b6001600160a01b039092166020928302919091019091015280610d03816119ab565b915050610cae565b6000610d168161116c565b6001600160a01b038216610d3c5760405162461bcd60e51b81526004016104ae906119c4565b6104c16000836111bd565b6000610d528161116c565b6001600160a01b038216610d785760405162461bcd60e51b81526004016104ae906119c4565b6104c1600080516020611cfe833981519152836111bd565b600080516020611cfe833981519152610da88161116c565b60028a8a604051610dba9291906119fb565b9081526040519081900360200190208054610dd490611a0b565b159050610e235760405162461bcd60e51b815260206004820152601f60248201527f4f76657276696577426c6f636b496e666f20616c72656164792073617665640060448201526064016104ae565b60038a8a604051610e359291906119fb565b9081526040519081900360200190208054610e4f90611a0b565b159050610ead5760405162461bcd60e51b815260206004820152602660248201527f44657461696c5265666572656e6365426c6f636b496e666f20616c7265616479604482015265081cd85d995960d21b60648201526084016104ae565b6040805160606020601f8b018190040282018101835291810189815290918291908b908b9081908501838280828437600092019190915250505090825250602001879052604051600290610f04908d908d906119fb565b90815260405190819003602001902081518190610f219082611aa0565b5060208201518160010155905050604051806060016040528086868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525060208101859052604090810184905251600390610f93908d908d906119fb565b90815260405190819003602001902081518190610fb09082611aa0565b5060208201516001820155604091820151600290910155517fbf0ce7d613c1ccecbea488eb624c6b6aae69fe8df27a0ef2cd5ace0d62d1a09390611005908c908c908c908c908c908c908c908c908c90611bc3565b60405180910390a150505050505050505050565b6000818152600160205260408120610368906111d3565b60008281526020819052604090206001015461104b8161116c565b61043d838361119b565b60006110608161116c565b6001600160a01b0382166110865760405162461bcd60e51b81526004016104ae906119c4565b6104c1600080516020611cfe8339815191528361119b565b6110a882826106b8565b6104c1576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556110de3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006106b1836001600160a01b0384166111dd565b60006001600160e01b03198216637965db0b60e01b148061036857506301ffc9a760e01b6001600160e01b0319831614610368565b611176813361122c565b50565b611183828261109e565b600082815260016020526040902061043d9082611122565b6111a58282611285565b600082815260016020526040902061043d90826112ea565b6104c18282611179565b60006106b183836112ff565b6000610368825490565b600081815260018301602052604081205461122457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610368565b506000610368565b61123682826106b8565b6104c15761124381611329565b61124e83602061133b565b60405160200161125f929190611c1e565b60408051601f198184030181529082905262461bcd60e51b82526104ae91600401611c93565b61128f82826106b8565b156104c1576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006106b1836001600160a01b0384166114d7565b60008260000182815481106113165761131661197f565b9060005260206000200154905092915050565b60606103686001600160a01b03831660145b6060600061134a836002611ca6565b611355906002611a3f565b67ffffffffffffffff81111561136d5761136d611969565b6040519080825280601f01601f191660200182016040528015611397576020820181803683370190505b509050600360fc1b816000815181106113b2576113b261197f565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106113e1576113e161197f565b60200101906001600160f81b031916908160001a9053506000611405846002611ca6565b611410906001611a3f565b90505b6001811115611488576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106114445761144461197f565b1a60f81b82828151811061145a5761145a61197f565b60200101906001600160f81b031916908160001a90535060049490941c9361148181611cbd565b9050611413565b5083156106b15760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016104ae565b600081815260018301602052604081205480156115c05760006114fb600183611cd4565b855490915060009061150f90600190611cd4565b905081811461157457600086600001828154811061152f5761152f61197f565b90600052602060002001549050808760000184815481106115525761155261197f565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061158557611585611ce7565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610368565b6000915050610368565b6000602082840312156115dc57600080fd5b81356001600160e01b0319811681146106b157600080fd5b60006020828403121561160657600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b8181101561164e5783516001600160a01b031683529284019291840191600101611629565b50909695505050505050565b80356001600160a01b038116811461167157600080fd5b919050565b6000806040838503121561168957600080fd5b823591506116996020840161165a565b90509250929050565b6000602082840312156116b457600080fd5b6106b18261165a565b60008083601f8401126116cf57600080fd5b50813567ffffffffffffffff8111156116e757600080fd5b6020830191508360208285010111156105db57600080fd5b6000806020838503121561171257600080fd5b823567ffffffffffffffff81111561172957600080fd5b611735858286016116bd565b90969095509350505050565b60005b8381101561175c578181015183820152602001611744565b50506000910152565b6000815180845261177d816020860160208601611741565b601f01601f19169290920160200192915050565b6040815260006117a46040830185611765565b90508260208301529392505050565b600080604083850312156117c657600080fd5b6117cf8361165a565b91506116996020840161165a565b600080604083850312156117f057600080fd5b50508035926020909101359150565b60a08152600061181260a0830188611765565b866020840152828103604084015261182a8187611765565b60608401959095525050608001529392505050565b60008060008060006060868803121561185757600080fd5b853567ffffffffffffffff8082111561186f57600080fd5b61187b89838a016116bd565b9097509550602088013591508082111561189457600080fd5b506118a1888289016116bd565b96999598509660400135949350505050565b600080600080600080600080600060c08a8c0312156118d157600080fd5b893567ffffffffffffffff808211156118e957600080fd5b6118f58d838e016116bd565b909b50995060208c013591508082111561190e57600080fd5b61191a8d838e016116bd565b909950975060408c0135965060608c013591508082111561193a57600080fd5b506119478c828d016116bd565b9a9d999c50979a96999598959660808101359660a09091013595509350505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016119bd576119bd611995565b5060010190565b60208082526017908201527f696e76616c6964206163636f756e742061646472657373000000000000000000604082015260600190565b8183823760009101908152919050565b600181811c90821680611a1f57607f821691505b60208210810361041257634e487b7160e01b600052602260045260246000fd5b8082018082111561036857610368611995565b601f82111561043d57600081815260208120601f850160051c81016020861015611a795750805b601f850160051c820191505b81811015611a9857828155600101611a85565b505050505050565b815167ffffffffffffffff811115611aba57611aba611969565b611ace81611ac88454611a0b565b84611a52565b602080601f831160018114611b035760008415611aeb5750858301515b600019600386901b1c1916600185901b178555611a98565b600085815260208120601f198616915b82811015611b3257888601518255948401946001909101908401611b13565b5085821015611b505787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b606081526000611b9d606083018789611b60565b8281036020840152611bb0818688611b60565b9150508260408301529695505050505050565b60c081526000611bd760c083018b8d611b60565b8281036020840152611bea818a8c611b60565b90508760408401528281036060840152611c05818789611b60565b6080840195909552505060a00152979650505050505050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611c56816017850160208801611741565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611c87816028840160208801611741565b01602801949350505050565b6020815260006106b16020830184611765565b808202811582820484141761036857610368611995565b600081611ccc57611ccc611995565b506000190190565b8181038181111561036857610368611995565b634e487b7160e01b600052603160045260246000fdfe20296b01d0b6bd176f0c1e29644934c0047abf080dae43609a1bbc09e39bafdba264697066735822122086c98f6d8061196c0118099b5f7eba174a217b13b59f8c80821331bf99a3d35264736f6c63430008120033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
