{
  "_format": "hh-sol-artifact-1",
  "contractName": "MerkleUtils",
  "sourceName": "src/v0.8/shared/utils/merkle/MerkleUtils.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "previousAdmin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "AdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "beacon",
          "type": "address"
        }
      ],
      "name": "BeaconUpgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "getImplementation",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_roles",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_root",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_leaf",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32[]",
          "name": "_siblings",
          "type": "bytes32[]"
        },
        {
          "internalType": "uint32",
          "name": "_path",
          "type": "uint32"
        }
      ],
      "name": "isValidMerkleProof",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "_state",
          "type": "bool"
        }
      ],
      "name": "setMockValidState",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        }
      ],
      "name": "upgradeTo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "upgradeToAndCall",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a06040523060805234801561001457600080fd5b506080516111ee61004c6000396000818161015c015281816101a50152818161024401528181610284015261030001526111ee6000f3fe6080604052600436106100605760003560e01c80633659cfe6146100655780633c72a8391461008757806341c2412d146100a55780634f1ef286146100db57806352d1902d146100ee578063aaf10f4214610110578063c4d66de814610132575b600080fd5b34801561007157600080fd5b50610085610080366004610941565b610152565b005b34801561009357600080fd5b506100856100a2366004610975565b50565b3480156100b157600080fd5b506100c56100c0366004610ace565b610220565b6040516100d29190610b56565b60405180910390f35b6100856100e9366004610bfb565b61023a565b3480156100fa57600080fd5b506101036102f3565b6040516100d29190610c58565b34801561011c57600080fd5b50610125610350565b6040516100d29190610c6f565b34801561013e57600080fd5b5061008561014d366004610941565b61035f565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036101a35760405162461bcd60e51b815260040161019a90610cb7565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166101d5610450565b6001600160a01b0316146101fb5760405162461bcd60e51b815260040161019a90610cfe565b6102048161046c565b604080516000808252602082019092526100a291839190610505565b60008461022e8484876105e7565b1490505b949350505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036102825760405162461bcd60e51b815260040161019a90610cb7565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166102b4610450565b6001600160a01b0316146102da5760405162461bcd60e51b815260040161019a90610cfe565b6102e38261046c565b6102ef82826001610505565b5050565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461033d5760405162461bcd60e51b815260040161019a90610d63565b5060008051602061117283398151915290565b600061035a610450565b905090565b600054610100900460ff161580801561037f5750600054600160ff909116105b806103a0575061038e30610686565b1580156103a0575060005460ff166001145b6103bc5760405162461bcd60e51b815260040161019a90610dbe565b6000805460ff1916600117905580156103df576000805461ff0019166101001790555b606580546001600160a01b0319166001600160a01b038416179055610402610695565b80156102ef576000805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989061044490600190610de2565b60405180910390a15050565b600080516020611172833981519152546001600160a01b031690565b606554604051632474521560e21b81526001600160a01b039091169060009082906391d14854906104a39084903390600401610df0565b602060405180830381865afa1580156104c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e49190610e16565b6105005760405162461bcd60e51b815260040161019a90610e6b565b505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561053857610500836106be565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610592575060408051601f3d908101601f1916820190925261058f91810190610e86565b60015b6105ae5760405162461bcd60e51b815260040161019a90610ef2565b60008051602061117283398151915281146105db5760405162461bcd60e51b815260040161019a90610f48565b50610500838383610712565b600081815b855181101561067b57600180861690036106325761062b6106268388848151811061061957610619610f58565b602002602001015161073d565b61076a565b915061065b565b61065861062687838151811061064a5761064a610f58565b60200260200101518461073d565b91505b60018563ffffffff16901c9450808061067390610f84565b9150506105ec565b5090505b9392505050565b6001600160a01b03163b151590565b600054610100900460ff166106bc5760405162461bcd60e51b815260040161019a90610fe6565b565b6106c781610686565b6106e35760405162461bcd60e51b815260040161019a90611040565b60008051602061117283398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61071b836107cd565b6000825111806107285750805b1561050057610737838361080d565b50505050565b60608282604051602001610752929190611050565b60405160208183030381529060405290505b92915050565b60008060028360405161077d91906110bc565b602060405180830381855afa15801561079a573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906107bd9190610e86565b603f60ff19821617169392505050565b6107d6816106be565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061067f8383604051806060016040528060278152602001611192602791396060600080856001600160a01b03168560405161084a91906110bc565b600060405180830381855af49150503d8060008114610885576040519150601f19603f3d011682016040523d82523d6000602084013e61088a565b606091505b509150915061089b868383876108a5565b9695505050505050565b606083156108e25782516000036108db576108bf85610686565b6108db5760405162461bcd60e51b815260040161019a906110fc565b5081610232565b61023283838151156108f75781518083602001fd5b8060405162461bcd60e51b815260040161019a9190611140565b60006001600160a01b038216610764565b61092b81610911565b81146100a257600080fd5b803561076481610922565b60006020828403121561095657610956600080fd5b60006102328484610936565b80151561092b565b803561076481610962565b60006020828403121561098a5761098a600080fd5b6000610232848461096a565b8061092b565b803561076481610996565b601f01601f191690565b634e487b7160e01b600052604160045260246000fd5b6109d0826109a7565b81018181106001600160401b03821117156109ed576109ed6109b1565b6040525050565b60006109ff60405190565b9050610a0b82826109c7565b919050565b60006001600160401b03821115610a2957610a296109b1565b5060209081020190565b6000610a46610a4184610a10565b6109f4565b83815290506020808201908402830185811115610a6557610a65600080fd5b835b81811015610a895780610a7a888261099c565b84525060209283019201610a67565b5050509392505050565b600082601f830112610aa757610aa7600080fd5b8135610232848260208601610a33565b63ffffffff811661092b565b803561076481610ab7565b60008060008060808587031215610ae757610ae7600080fd5b6000610af3878761099c565b9450506020610b048782880161099c565b93505060408501356001600160401b03811115610b2357610b23600080fd5b610b2f87828801610a93565b9250506060610b4087828801610ac3565b91505092959194509250565b8015155b82525050565b602081016107648284610b4c565b60006001600160401b03821115610b7d57610b7d6109b1565b610b86826109a7565b60200192915050565b82818337506000910152565b6000610ba9610a4184610b64565b905082815260208101848484011115610bc457610bc4600080fd5b610bcf848285610b8f565b509392505050565b600082601f830112610beb57610beb600080fd5b8135610232848260208601610b9b565b60008060408385031215610c1157610c11600080fd5b6000610c1d8585610936565b92505060208301356001600160401b03811115610c3c57610c3c600080fd5b610c4885828601610bd7565b9150509250929050565b80610b50565b602081016107648284610c52565b610b5081610911565b602081016107648284610c66565b602c815260006020820160008051602061115283398151915281526b19195b1959d85d1958d85b1b60a21b602082015291505b5060400190565b6020808252810161076481610c7d565b602c815260006020820160008051602061115283398151915281526b6163746976652070726f787960a01b60208201529150610cb0565b6020808252810161076481610cc7565b603881526000602082017f555550535570677261646561626c653a206d757374206e6f742062652063616c8152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b60208201529150610cb0565b6020808252810161076481610d0e565b602e81526000602082017f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b60208201529150610cb0565b6020808252810161076481610d73565b600060ff8216610764565b610b5081610dce565b602081016107648284610dd9565b60408101610dfe8285610c52565b61067f6020830184610c66565b805161076481610962565b600060208284031215610e2b57610e2b600080fd5b60006102328484610e0b565b601a81526000602082017913db9b1e48185b1b1bddd959081c9bdb194818d85b8818d85b1b60321b815291505b5060200190565b6020808252810161076481610e37565b805161076481610996565b600060208284031215610e9b57610e9b600080fd5b60006102328484610e7b565b602e81526000602082017f45524331393637557067726164653a206e657720696d706c656d656e7461746981526d6f6e206973206e6f74205555505360901b60208201529150610cb0565b6020808252810161076481610ea7565b602981526000602082017f45524331393637557067726164653a20756e737570706f727465642070726f788152681a58589b195555525160ba1b60208201529150610cb0565b6020808252810161076481610f02565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198203610f9757610f97610f6e565b5060010190565b602b81526000602082017f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206981526a6e697469616c697a696e6760a81b60208201529150610cb0565b6020808252810161076481610f9e565b602d81526000602082017f455243313936373a206e657720696d706c656d656e746174696f6e206973206e81526c1bdd08184818dbdb9d1c9858dd609a1b60208201529150610cb0565b6020808252810161076481610ff6565b600061105c8285610c52565b60208201915061106c8284610c52565b5060200192915050565b60005b83811015611091578181015183820152602001611079565b50506000910152565b60006110a4825190565b6110b2818560208601611076565b9290920192915050565b600061067f828461109a565b601d81526000602082017f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081529150610e64565b60208082528101610764816110c8565b6000611116825190565b80845260208401935061112d818560208601611076565b611136816109a7565b9093019392505050565b6020808252810161067f818461110c56fe46756e6374696f6e206d7573742062652063616c6c6564207468726f75676820360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220354a1530adb82887ab134fc455917e21ed1f08fe1024529eb4498448c21d112664736f6c63430008150033",
  "deployedBytecode": "0x6080604052600436106100605760003560e01c80633659cfe6146100655780633c72a8391461008757806341c2412d146100a55780634f1ef286146100db57806352d1902d146100ee578063aaf10f4214610110578063c4d66de814610132575b600080fd5b34801561007157600080fd5b50610085610080366004610941565b610152565b005b34801561009357600080fd5b506100856100a2366004610975565b50565b3480156100b157600080fd5b506100c56100c0366004610ace565b610220565b6040516100d29190610b56565b60405180910390f35b6100856100e9366004610bfb565b61023a565b3480156100fa57600080fd5b506101036102f3565b6040516100d29190610c58565b34801561011c57600080fd5b50610125610350565b6040516100d29190610c6f565b34801561013e57600080fd5b5061008561014d366004610941565b61035f565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036101a35760405162461bcd60e51b815260040161019a90610cb7565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166101d5610450565b6001600160a01b0316146101fb5760405162461bcd60e51b815260040161019a90610cfe565b6102048161046c565b604080516000808252602082019092526100a291839190610505565b60008461022e8484876105e7565b1490505b949350505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036102825760405162461bcd60e51b815260040161019a90610cb7565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166102b4610450565b6001600160a01b0316146102da5760405162461bcd60e51b815260040161019a90610cfe565b6102e38261046c565b6102ef82826001610505565b5050565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461033d5760405162461bcd60e51b815260040161019a90610d63565b5060008051602061117283398151915290565b600061035a610450565b905090565b600054610100900460ff161580801561037f5750600054600160ff909116105b806103a0575061038e30610686565b1580156103a0575060005460ff166001145b6103bc5760405162461bcd60e51b815260040161019a90610dbe565b6000805460ff1916600117905580156103df576000805461ff0019166101001790555b606580546001600160a01b0319166001600160a01b038416179055610402610695565b80156102ef576000805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989061044490600190610de2565b60405180910390a15050565b600080516020611172833981519152546001600160a01b031690565b606554604051632474521560e21b81526001600160a01b039091169060009082906391d14854906104a39084903390600401610df0565b602060405180830381865afa1580156104c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e49190610e16565b6105005760405162461bcd60e51b815260040161019a90610e6b565b505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561053857610500836106be565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610592575060408051601f3d908101601f1916820190925261058f91810190610e86565b60015b6105ae5760405162461bcd60e51b815260040161019a90610ef2565b60008051602061117283398151915281146105db5760405162461bcd60e51b815260040161019a90610f48565b50610500838383610712565b600081815b855181101561067b57600180861690036106325761062b6106268388848151811061061957610619610f58565b602002602001015161073d565b61076a565b915061065b565b61065861062687838151811061064a5761064a610f58565b60200260200101518461073d565b91505b60018563ffffffff16901c9450808061067390610f84565b9150506105ec565b5090505b9392505050565b6001600160a01b03163b151590565b600054610100900460ff166106bc5760405162461bcd60e51b815260040161019a90610fe6565b565b6106c781610686565b6106e35760405162461bcd60e51b815260040161019a90611040565b60008051602061117283398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61071b836107cd565b6000825111806107285750805b1561050057610737838361080d565b50505050565b60608282604051602001610752929190611050565b60405160208183030381529060405290505b92915050565b60008060028360405161077d91906110bc565b602060405180830381855afa15801561079a573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906107bd9190610e86565b603f60ff19821617169392505050565b6107d6816106be565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061067f8383604051806060016040528060278152602001611192602791396060600080856001600160a01b03168560405161084a91906110bc565b600060405180830381855af49150503d8060008114610885576040519150601f19603f3d011682016040523d82523d6000602084013e61088a565b606091505b509150915061089b868383876108a5565b9695505050505050565b606083156108e25782516000036108db576108bf85610686565b6108db5760405162461bcd60e51b815260040161019a906110fc565b5081610232565b61023283838151156108f75781518083602001fd5b8060405162461bcd60e51b815260040161019a9190611140565b60006001600160a01b038216610764565b61092b81610911565b81146100a257600080fd5b803561076481610922565b60006020828403121561095657610956600080fd5b60006102328484610936565b80151561092b565b803561076481610962565b60006020828403121561098a5761098a600080fd5b6000610232848461096a565b8061092b565b803561076481610996565b601f01601f191690565b634e487b7160e01b600052604160045260246000fd5b6109d0826109a7565b81018181106001600160401b03821117156109ed576109ed6109b1565b6040525050565b60006109ff60405190565b9050610a0b82826109c7565b919050565b60006001600160401b03821115610a2957610a296109b1565b5060209081020190565b6000610a46610a4184610a10565b6109f4565b83815290506020808201908402830185811115610a6557610a65600080fd5b835b81811015610a895780610a7a888261099c565b84525060209283019201610a67565b5050509392505050565b600082601f830112610aa757610aa7600080fd5b8135610232848260208601610a33565b63ffffffff811661092b565b803561076481610ab7565b60008060008060808587031215610ae757610ae7600080fd5b6000610af3878761099c565b9450506020610b048782880161099c565b93505060408501356001600160401b03811115610b2357610b23600080fd5b610b2f87828801610a93565b9250506060610b4087828801610ac3565b91505092959194509250565b8015155b82525050565b602081016107648284610b4c565b60006001600160401b03821115610b7d57610b7d6109b1565b610b86826109a7565b60200192915050565b82818337506000910152565b6000610ba9610a4184610b64565b905082815260208101848484011115610bc457610bc4600080fd5b610bcf848285610b8f565b509392505050565b600082601f830112610beb57610beb600080fd5b8135610232848260208601610b9b565b60008060408385031215610c1157610c11600080fd5b6000610c1d8585610936565b92505060208301356001600160401b03811115610c3c57610c3c600080fd5b610c4885828601610bd7565b9150509250929050565b80610b50565b602081016107648284610c52565b610b5081610911565b602081016107648284610c66565b602c815260006020820160008051602061115283398151915281526b19195b1959d85d1958d85b1b60a21b602082015291505b5060400190565b6020808252810161076481610c7d565b602c815260006020820160008051602061115283398151915281526b6163746976652070726f787960a01b60208201529150610cb0565b6020808252810161076481610cc7565b603881526000602082017f555550535570677261646561626c653a206d757374206e6f742062652063616c8152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b60208201529150610cb0565b6020808252810161076481610d0e565b602e81526000602082017f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b60208201529150610cb0565b6020808252810161076481610d73565b600060ff8216610764565b610b5081610dce565b602081016107648284610dd9565b60408101610dfe8285610c52565b61067f6020830184610c66565b805161076481610962565b600060208284031215610e2b57610e2b600080fd5b60006102328484610e0b565b601a81526000602082017913db9b1e48185b1b1bddd959081c9bdb194818d85b8818d85b1b60321b815291505b5060200190565b6020808252810161076481610e37565b805161076481610996565b600060208284031215610e9b57610e9b600080fd5b60006102328484610e7b565b602e81526000602082017f45524331393637557067726164653a206e657720696d706c656d656e7461746981526d6f6e206973206e6f74205555505360901b60208201529150610cb0565b6020808252810161076481610ea7565b602981526000602082017f45524331393637557067726164653a20756e737570706f727465642070726f788152681a58589b195555525160ba1b60208201529150610cb0565b6020808252810161076481610f02565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198203610f9757610f97610f6e565b5060010190565b602b81526000602082017f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206981526a6e697469616c697a696e6760a81b60208201529150610cb0565b6020808252810161076481610f9e565b602d81526000602082017f455243313936373a206e657720696d706c656d656e746174696f6e206973206e81526c1bdd08184818dbdb9d1c9858dd609a1b60208201529150610cb0565b6020808252810161076481610ff6565b600061105c8285610c52565b60208201915061106c8284610c52565b5060200192915050565b60005b83811015611091578181015183820152602001611079565b50506000910152565b60006110a4825190565b6110b2818560208601611076565b9290920192915050565b600061067f828461109a565b601d81526000602082017f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081529150610e64565b60208082528101610764816110c8565b6000611116825190565b80845260208401935061112d818560208601611076565b611136816109a7565b9093019392505050565b6020808252810161067f818461110c56fe46756e6374696f6e206d7573742062652063616c6c6564207468726f75676820360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220354a1530adb82887ab134fc455917e21ed1f08fe1024529eb4498448c21d112664736f6c63430008150033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
