{
  "_format": "hh-sol-artifact-1",
  "contractName": "SomaGuard",
  "sourceName": "contracts/soma/SomaGuard/SomaGuard.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address[][]",
          "name": "accounts",
          "type": "address[][]"
        },
        {
          "indexed": false,
          "internalType": "bytes32[]",
          "name": "privileges",
          "type": "bytes32[]"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "BatchUpdate",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "accounts",
          "type": "address[]"
        },
        {
          "indexed": false,
          "internalType": "bytes32[]",
          "name": "access",
          "type": "bytes32[]"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "BatchUpdateSingle",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "TokensRecovered",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_PRIVILEGES",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "OPERATOR_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "SOMA",
      "outputs": [
        {
          "internalType": "contract ISOMA",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "TOKEN_RECOVERY_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "VERSION",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "accounts_",
          "type": "address[]"
        }
      ],
      "name": "batchFetch",
      "outputs": [
        {
          "internalType": "bytes32[]",
          "name": "privileges_",
          "type": "bytes32[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "accounts_",
          "type": "address[]"
        },
        {
          "internalType": "bytes32[]",
          "name": "privileges_",
          "type": "bytes32[]"
        }
      ],
      "name": "batchUpdate",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[][]",
          "name": "accounts_",
          "type": "address[][]"
        },
        {
          "internalType": "bytes32[]",
          "name": "privileges_",
          "type": "bytes32[]"
        }
      ],
      "name": "batchUpdate",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "query",
          "type": "bytes32"
        }
      ],
      "name": "check",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "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": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes[]",
          "name": "data",
          "type": "bytes[]"
        }
      ],
      "name": "multicall",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "results",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "privileges",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "recoverTokens",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60c0604052730f3dc00189dbcd1d0c574e48031270cae04c4adf6080526001600160401b0360a05234801561003357600080fd5b506000805460ff19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a160805160a051611d3a6100dd600039600081816101bc01528181610b6001528181610c8a0152610edf015260008181610208015281816103630152818161047e0152818161051a01528181610605015281816107bb01528181610857015261093a0152611d3a6000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c80638456cb59116100ad578063e196b30a11610071578063e196b30a146102b7578063f42f7f2c146102ca578063f5b541a6146102dd578063fd474a7e14610304578063ffa1ad741461032457600080fd5b80638456cb591461024257806391d148541461024a578063ac9650d81461025d578063c066a5b11461027d578063d86975981461029057600080fd5b80632a7a0c68116100f45780632a7a0c68146101b75780633f4ba83a146101de5780635c975abb146101e85780635f3e849f146101f057806363727fc21461020357600080fd5b806301ffc9a71461012657806306fdde031461014e578063248a9ca314610183578063253bd7b7146101a4575b600080fd5b61013961013436600461168f565b610334565b60405190151581526020015b60405180910390f35b6101766040518060400160405280600981526020016814dbdb5851dd585c9960ba1b81525081565b6040516101459190611709565b61019661019136600461171c565b61035f565b604051908152602001610145565b6101396101b236600461174a565b610451565b6101967f000000000000000000000000000000000000000000000000000000000000000081565b6101e661046d565b005b610139610601565b6101e66101fe366004611776565b61069a565b61022a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610145565b6101e66107aa565b6101396102583660046117b7565b610936565b61027061026b366004611833565b610a2d565b6040516101459190611875565b61019661028b3660046118d7565b610b22565b6101967f0b8459b722d944f0580da74c767d2dcae280ce16527c19c825b302a24e208dfd81565b6101396102c53660046118f4565b610b85565b6101396102d83660046118f4565b610db1565b6101967f639ff064a8af3a410a28e6545f66c6c87773a87ab1a75648b371d2d9e525b1b681565b610317610312366004611833565b61106a565b6040516101459190611960565b61019665076312e302e360d41b81565b60006001600160e01b03198216630d26cb9960e41b148061035957506103598261111e565b92915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e391906119a4565b6001600160a01b031663248a9ca3836040518263ffffffff1660e01b815260040161041091815260200190565b602060405180830381865afa15801561042d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035991906119c1565b600061046661045f84610b22565b8316831490565b9392505050565b6000339050806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee97f7f36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104fe91906119a4565b6001600160a01b031614806105a55750806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632d37ead56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610576573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059a91906119a4565b6001600160a01b0316145b6105f65760405162461bcd60e51b815260206004820152601f60248201527f534f4d413a204d4153544552206f7220535542204d4153544552206f6e6c790060448201526064015b60405180910390fd5b6105fe611143565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610661573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068591906119da565b8061069557505060005460ff1690565b905090565b7f0b8459b722d944f0580da74c767d2dcae280ce16527c19c825b302a24e208dfd6106c58133610936565b6106e15760405162461bcd60e51b81526004016105ed906119fc565b6106ec600185611195565b156107395760405162461bcd60e51b815260206004820152601c60248201527f546f6b656e5265636f766572793a20494e56414c49445f544f4b454e0000000060448201526064016105ed565b61074d6001600160a01b03851684846111b7565b336001600160a01b0316836001600160a01b0316856001600160a01b03167fca574176b1d34032f40f7fb0c519eae468b4535ebf7b27f986a7b6e2fa53d5388560405161079c91815260200190565b60405180910390a450505050565b6000339050806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee97f7f36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610817573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083b91906119a4565b6001600160a01b031614806108e25750806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632d37ead56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d791906119a4565b6001600160a01b0316145b61092e5760405162461bcd60e51b815260206004820152601f60248201527f534f4d413a204d4153544552206f7220535542204d4153544552206f6e6c790060448201526064016105ed565b6105fe61120e565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610996573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ba91906119a4565b604051632474521560e21b8152600481018590526001600160a01b03848116602483015291909116906391d1485490604401602060405180830381865afa158015610a09573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046691906119da565b60608167ffffffffffffffff811115610a4857610a48611a63565b604051908082528060200260200182016040528015610a7b57816020015b6060815260200190600190039081610a665790505b50905060005b82811015610b1b57610aeb30858584818110610a9f57610a9f611a79565b9050602002810190610ab19190611a8f565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061124b92505050565b828281518110610afd57610afd611a79565b60200260200101819052508080610b1390611ad6565b915050610a81565b5092915050565b6001600160a01b03811660009081526003602052604081205415610b5e576001600160a01b038216600090815260036020526040902054610359565b7f000000000000000000000000000000000000000000000000000000000000000092915050565b60007f639ff064a8af3a410a28e6545f66c6c87773a87ab1a75648b371d2d9e525b1b6610bb28133610936565b610bce5760405162461bcd60e51b81526004016105ed906119fc565b848314610c435760405162461bcd60e51b815260206004820152603860248201527f536f6d6147756172643a206163636f756e747320616e6420616363657373206d60448201527f7573742068617665207468652073616d65206c656e677468000000000000000060648201526084016105ed565b84610c605760405162461bcd60e51b81526004016105ed90611afd565b60005b85811015610d5d576000858583818110610c7f57610c7f611a79565b9050602002013590507f00000000000000000000000000000000000000000000000000000000000000008103610d035760036000898985818110610cc557610cc5611a79565b9050602002016020810190610cda91906118d7565b6001600160a01b03166001600160a01b0316815260200190815260200160002060009055610d4a565b80600360008a8a86818110610d1a57610d1a611a79565b9050602002016020810190610d2f91906118d7565b6001600160a01b031681526020810191909152604001600020555b5080610d5581611ad6565b915050610c63565b50336001600160a01b03167f04a0a6a664207fb3936ec61c4eb57449771715fa7e874750ecd4249ca066ab3987878787604051610d9d9493929190611bc4565b60405180910390a250600195945050505050565b60007f639ff064a8af3a410a28e6545f66c6c87773a87ab1a75648b371d2d9e525b1b6610dde8133610936565b610dfa5760405162461bcd60e51b81526004016105ed906119fc565b848314610e6f5760405162461bcd60e51b815260206004820152603c60248201527f536f6d6147756172643a206163636f756e747320616e642070726976696c656760448201527f6573206d7573742068617665207468652073616d65206c656e6774680000000060648201526084016105ed565b84610e8c5760405162461bcd60e51b81526004016105ed90611afd565b60005b8581101561102a576000858583818110610eab57610eab611a79565b9050602002013590506000888884818110610ec857610ec8611a79565b9050602002810190610eda9190611beb565b9150507f00000000000000000000000000000000000000000000000000000000000000008203610f905760005b81811015610f8a57600360008b8b87818110610f2557610f25611a79565b9050602002810190610f379190611beb565b84818110610f4757610f47611a79565b9050602002016020810190610f5c91906118d7565b6001600160a01b03168152602081019190915260400160009081205580610f8281611ad6565b915050610f07565b50611017565b60005b818110156110155782600360008c8c88818110610fb257610fb2611a79565b9050602002810190610fc49190611beb565b85818110610fd457610fd4611a79565b9050602002016020810190610fe991906118d7565b6001600160a01b031681526020810191909152604001600020558061100d81611ad6565b915050610f93565b505b50508061102390611ad6565b9050610e8f565b50336001600160a01b03167fc73e33eb5b85695d169671255f9aeeeaba590d4a4d4fd10c8807f35be3ab6d3c87878787604051610d9d9493929190611c35565b6060818067ffffffffffffffff81111561108657611086611a63565b6040519080825280602002602001820160405280156110af578160200160208202803683370190505b50915060005b81811015611116576110e78585838181106110d2576110d2611a79565b905060200201602081019061028b91906118d7565b8382815181106110f9576110f9611a79565b60209081029190910101528061110e81611ad6565b9150506110b5565b505092915050565b60006001600160e01b03198216638757f10760e01b1480610359575061035982611270565b61114b611295565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b03811660009081526001830160205260408120541515610466565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526112099084906112e2565b505050565b6112166113b4565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586111783390565b60606104668383604051806060016040528060278152602001611d07602791396113fc565b60006001600160e01b0319821663b55bd4f760e01b14806103595750610359826114d9565b61129d610601565b6112e05760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016105ed565b565b6000611337826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661150e9092919063ffffffff16565b805190915015611209578080602001905181019061135591906119da565b6112095760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016105ed565b6113bc610601565b156112e05760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016105ed565b60606001600160a01b0384163b6114645760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016105ed565b600080856001600160a01b03168560405161147f9190611cea565b600060405180830381855af49150503d80600081146114ba576040519150601f19603f3d011682016040523d82523d6000602084013e6114bf565b606091505b50915091506114cf828286611525565b9695505050505050565b60006001600160e01b0319821663d86f1ca160e01b148061035957506301ffc9a760e01b6001600160e01b0319831614610359565b606061151d848460008561155e565b949350505050565b60608315611534575081610466565b8251156115445782518084602001fd5b8160405162461bcd60e51b81526004016105ed9190611709565b6060824710156115bf5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016105ed565b6001600160a01b0385163b6116165760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105ed565b600080866001600160a01b031685876040516116329190611cea565b60006040518083038185875af1925050503d806000811461166f576040519150601f19603f3d011682016040523d82523d6000602084013e611674565b606091505b5091509150611684828286611525565b979650505050505050565b6000602082840312156116a157600080fd5b81356001600160e01b03198116811461046657600080fd5b60005b838110156116d45781810151838201526020016116bc565b50506000910152565b600081518084526116f58160208601602086016116b9565b601f01601f19169290920160200192915050565b60208152600061046660208301846116dd565b60006020828403121561172e57600080fd5b5035919050565b6001600160a01b03811681146105fe57600080fd5b6000806040838503121561175d57600080fd5b823561176881611735565b946020939093013593505050565b60008060006060848603121561178b57600080fd5b833561179681611735565b925060208401356117a681611735565b929592945050506040919091013590565b600080604083850312156117ca57600080fd5b8235915060208301356117dc81611735565b809150509250929050565b60008083601f8401126117f957600080fd5b50813567ffffffffffffffff81111561181157600080fd5b6020830191508360208260051b850101111561182c57600080fd5b9250929050565b6000806020838503121561184657600080fd5b823567ffffffffffffffff81111561185d57600080fd5b611869858286016117e7565b90969095509350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156118ca57603f198886030184526118b88583516116dd565b9450928501929085019060010161189c565b5092979650505050505050565b6000602082840312156118e957600080fd5b813561046681611735565b6000806000806040858703121561190a57600080fd5b843567ffffffffffffffff8082111561192257600080fd5b61192e888389016117e7565b9096509450602087013591508082111561194757600080fd5b50611954878288016117e7565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b818110156119985783518352928401929184019160010161197c565b50909695505050505050565b6000602082840312156119b657600080fd5b815161046681611735565b6000602082840312156119d357600080fd5b5051919050565b6000602082840312156119ec57600080fd5b8151801515811461046657600080fd5b60208082526041908201527f536f6d61416363657373436f6e74726f6c3a2063616c6c657220646f6573206e60408201527f6f7420686176652074686520617070726f70726961746520617574686f7269746060820152607960f81b608082015260a00190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112611aa657600080fd5b83018035915067ffffffffffffffff821115611ac157600080fd5b60200191503681900382131561182c57600080fd5b600060018201611af657634e487b7160e01b600052601160045260246000fd5b5060010190565b6020808252602c908201527f536f6d6147756172643a206163636f756e747320646f6573206e6f742068617660408201526b6520616e792076616c75657360a01b606082015260800190565b8183526000602080850194508260005b85811015611b87578135611b6c81611735565b6001600160a01b031687529582019590820190600101611b59565b509495945050505050565b81835260006001600160fb1b03831115611bab57600080fd5b8260051b80836020870137939093016020019392505050565b604081526000611bd8604083018688611b49565b8281036020840152611684818587611b92565b6000808335601e19843603018112611c0257600080fd5b83018035915067ffffffffffffffff821115611c1d57600080fd5b6020019150600581901b360382131561182c57600080fd5b604080825281018490526000600560608084019087831b85010188845b89811015611cc857868303605f190184528135368c9003601e19018112611c7857600080fd5b8b01602081810191359067ffffffffffffffff821115611c9757600080fd5b81881b3603831315611ca857600080fd5b611cb3868385611b49565b96810196955093909301925050600101611c52565b50508481036020860152611cdd818789611b92565b9998505050505050505050565b60008251611cfc8184602087016116b9565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000812000a",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101215760003560e01c80638456cb59116100ad578063e196b30a11610071578063e196b30a146102b7578063f42f7f2c146102ca578063f5b541a6146102dd578063fd474a7e14610304578063ffa1ad741461032457600080fd5b80638456cb591461024257806391d148541461024a578063ac9650d81461025d578063c066a5b11461027d578063d86975981461029057600080fd5b80632a7a0c68116100f45780632a7a0c68146101b75780633f4ba83a146101de5780635c975abb146101e85780635f3e849f146101f057806363727fc21461020357600080fd5b806301ffc9a71461012657806306fdde031461014e578063248a9ca314610183578063253bd7b7146101a4575b600080fd5b61013961013436600461168f565b610334565b60405190151581526020015b60405180910390f35b6101766040518060400160405280600981526020016814dbdb5851dd585c9960ba1b81525081565b6040516101459190611709565b61019661019136600461171c565b61035f565b604051908152602001610145565b6101396101b236600461174a565b610451565b6101967f000000000000000000000000000000000000000000000000000000000000000081565b6101e661046d565b005b610139610601565b6101e66101fe366004611776565b61069a565b61022a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610145565b6101e66107aa565b6101396102583660046117b7565b610936565b61027061026b366004611833565b610a2d565b6040516101459190611875565b61019661028b3660046118d7565b610b22565b6101967f0b8459b722d944f0580da74c767d2dcae280ce16527c19c825b302a24e208dfd81565b6101396102c53660046118f4565b610b85565b6101396102d83660046118f4565b610db1565b6101967f639ff064a8af3a410a28e6545f66c6c87773a87ab1a75648b371d2d9e525b1b681565b610317610312366004611833565b61106a565b6040516101459190611960565b61019665076312e302e360d41b81565b60006001600160e01b03198216630d26cb9960e41b148061035957506103598261111e565b92915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e391906119a4565b6001600160a01b031663248a9ca3836040518263ffffffff1660e01b815260040161041091815260200190565b602060405180830381865afa15801561042d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035991906119c1565b600061046661045f84610b22565b8316831490565b9392505050565b6000339050806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee97f7f36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104fe91906119a4565b6001600160a01b031614806105a55750806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632d37ead56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610576573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059a91906119a4565b6001600160a01b0316145b6105f65760405162461bcd60e51b815260206004820152601f60248201527f534f4d413a204d4153544552206f7220535542204d4153544552206f6e6c790060448201526064015b60405180910390fd5b6105fe611143565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610661573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068591906119da565b8061069557505060005460ff1690565b905090565b7f0b8459b722d944f0580da74c767d2dcae280ce16527c19c825b302a24e208dfd6106c58133610936565b6106e15760405162461bcd60e51b81526004016105ed906119fc565b6106ec600185611195565b156107395760405162461bcd60e51b815260206004820152601c60248201527f546f6b656e5265636f766572793a20494e56414c49445f544f4b454e0000000060448201526064016105ed565b61074d6001600160a01b03851684846111b7565b336001600160a01b0316836001600160a01b0316856001600160a01b03167fca574176b1d34032f40f7fb0c519eae468b4535ebf7b27f986a7b6e2fa53d5388560405161079c91815260200190565b60405180910390a450505050565b6000339050806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee97f7f36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610817573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083b91906119a4565b6001600160a01b031614806108e25750806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632d37ead56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d791906119a4565b6001600160a01b0316145b61092e5760405162461bcd60e51b815260206004820152601f60248201527f534f4d413a204d4153544552206f7220535542204d4153544552206f6e6c790060448201526064016105ed565b6105fe61120e565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610996573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ba91906119a4565b604051632474521560e21b8152600481018590526001600160a01b03848116602483015291909116906391d1485490604401602060405180830381865afa158015610a09573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046691906119da565b60608167ffffffffffffffff811115610a4857610a48611a63565b604051908082528060200260200182016040528015610a7b57816020015b6060815260200190600190039081610a665790505b50905060005b82811015610b1b57610aeb30858584818110610a9f57610a9f611a79565b9050602002810190610ab19190611a8f565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061124b92505050565b828281518110610afd57610afd611a79565b60200260200101819052508080610b1390611ad6565b915050610a81565b5092915050565b6001600160a01b03811660009081526003602052604081205415610b5e576001600160a01b038216600090815260036020526040902054610359565b7f000000000000000000000000000000000000000000000000000000000000000092915050565b60007f639ff064a8af3a410a28e6545f66c6c87773a87ab1a75648b371d2d9e525b1b6610bb28133610936565b610bce5760405162461bcd60e51b81526004016105ed906119fc565b848314610c435760405162461bcd60e51b815260206004820152603860248201527f536f6d6147756172643a206163636f756e747320616e6420616363657373206d60448201527f7573742068617665207468652073616d65206c656e677468000000000000000060648201526084016105ed565b84610c605760405162461bcd60e51b81526004016105ed90611afd565b60005b85811015610d5d576000858583818110610c7f57610c7f611a79565b9050602002013590507f00000000000000000000000000000000000000000000000000000000000000008103610d035760036000898985818110610cc557610cc5611a79565b9050602002016020810190610cda91906118d7565b6001600160a01b03166001600160a01b0316815260200190815260200160002060009055610d4a565b80600360008a8a86818110610d1a57610d1a611a79565b9050602002016020810190610d2f91906118d7565b6001600160a01b031681526020810191909152604001600020555b5080610d5581611ad6565b915050610c63565b50336001600160a01b03167f04a0a6a664207fb3936ec61c4eb57449771715fa7e874750ecd4249ca066ab3987878787604051610d9d9493929190611bc4565b60405180910390a250600195945050505050565b60007f639ff064a8af3a410a28e6545f66c6c87773a87ab1a75648b371d2d9e525b1b6610dde8133610936565b610dfa5760405162461bcd60e51b81526004016105ed906119fc565b848314610e6f5760405162461bcd60e51b815260206004820152603c60248201527f536f6d6147756172643a206163636f756e747320616e642070726976696c656760448201527f6573206d7573742068617665207468652073616d65206c656e6774680000000060648201526084016105ed565b84610e8c5760405162461bcd60e51b81526004016105ed90611afd565b60005b8581101561102a576000858583818110610eab57610eab611a79565b9050602002013590506000888884818110610ec857610ec8611a79565b9050602002810190610eda9190611beb565b9150507f00000000000000000000000000000000000000000000000000000000000000008203610f905760005b81811015610f8a57600360008b8b87818110610f2557610f25611a79565b9050602002810190610f379190611beb565b84818110610f4757610f47611a79565b9050602002016020810190610f5c91906118d7565b6001600160a01b03168152602081019190915260400160009081205580610f8281611ad6565b915050610f07565b50611017565b60005b818110156110155782600360008c8c88818110610fb257610fb2611a79565b9050602002810190610fc49190611beb565b85818110610fd457610fd4611a79565b9050602002016020810190610fe991906118d7565b6001600160a01b031681526020810191909152604001600020558061100d81611ad6565b915050610f93565b505b50508061102390611ad6565b9050610e8f565b50336001600160a01b03167fc73e33eb5b85695d169671255f9aeeeaba590d4a4d4fd10c8807f35be3ab6d3c87878787604051610d9d9493929190611c35565b6060818067ffffffffffffffff81111561108657611086611a63565b6040519080825280602002602001820160405280156110af578160200160208202803683370190505b50915060005b81811015611116576110e78585838181106110d2576110d2611a79565b905060200201602081019061028b91906118d7565b8382815181106110f9576110f9611a79565b60209081029190910101528061110e81611ad6565b9150506110b5565b505092915050565b60006001600160e01b03198216638757f10760e01b1480610359575061035982611270565b61114b611295565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b03811660009081526001830160205260408120541515610466565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526112099084906112e2565b505050565b6112166113b4565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586111783390565b60606104668383604051806060016040528060278152602001611d07602791396113fc565b60006001600160e01b0319821663b55bd4f760e01b14806103595750610359826114d9565b61129d610601565b6112e05760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016105ed565b565b6000611337826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661150e9092919063ffffffff16565b805190915015611209578080602001905181019061135591906119da565b6112095760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016105ed565b6113bc610601565b156112e05760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016105ed565b60606001600160a01b0384163b6114645760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016105ed565b600080856001600160a01b03168560405161147f9190611cea565b600060405180830381855af49150503d80600081146114ba576040519150601f19603f3d011682016040523d82523d6000602084013e6114bf565b606091505b50915091506114cf828286611525565b9695505050505050565b60006001600160e01b0319821663d86f1ca160e01b148061035957506301ffc9a760e01b6001600160e01b0319831614610359565b606061151d848460008561155e565b949350505050565b60608315611534575081610466565b8251156115445782518084602001fd5b8160405162461bcd60e51b81526004016105ed9190611709565b6060824710156115bf5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016105ed565b6001600160a01b0385163b6116165760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105ed565b600080866001600160a01b031685876040516116329190611cea565b60006040518083038185875af1925050503d806000811461166f576040519150601f19603f3d011682016040523d82523d6000602084013e611674565b606091505b5091509150611684828286611525565b979650505050505050565b6000602082840312156116a157600080fd5b81356001600160e01b03198116811461046657600080fd5b60005b838110156116d45781810151838201526020016116bc565b50506000910152565b600081518084526116f58160208601602086016116b9565b601f01601f19169290920160200192915050565b60208152600061046660208301846116dd565b60006020828403121561172e57600080fd5b5035919050565b6001600160a01b03811681146105fe57600080fd5b6000806040838503121561175d57600080fd5b823561176881611735565b946020939093013593505050565b60008060006060848603121561178b57600080fd5b833561179681611735565b925060208401356117a681611735565b929592945050506040919091013590565b600080604083850312156117ca57600080fd5b8235915060208301356117dc81611735565b809150509250929050565b60008083601f8401126117f957600080fd5b50813567ffffffffffffffff81111561181157600080fd5b6020830191508360208260051b850101111561182c57600080fd5b9250929050565b6000806020838503121561184657600080fd5b823567ffffffffffffffff81111561185d57600080fd5b611869858286016117e7565b90969095509350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156118ca57603f198886030184526118b88583516116dd565b9450928501929085019060010161189c565b5092979650505050505050565b6000602082840312156118e957600080fd5b813561046681611735565b6000806000806040858703121561190a57600080fd5b843567ffffffffffffffff8082111561192257600080fd5b61192e888389016117e7565b9096509450602087013591508082111561194757600080fd5b50611954878288016117e7565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b818110156119985783518352928401929184019160010161197c565b50909695505050505050565b6000602082840312156119b657600080fd5b815161046681611735565b6000602082840312156119d357600080fd5b5051919050565b6000602082840312156119ec57600080fd5b8151801515811461046657600080fd5b60208082526041908201527f536f6d61416363657373436f6e74726f6c3a2063616c6c657220646f6573206e60408201527f6f7420686176652074686520617070726f70726961746520617574686f7269746060820152607960f81b608082015260a00190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112611aa657600080fd5b83018035915067ffffffffffffffff821115611ac157600080fd5b60200191503681900382131561182c57600080fd5b600060018201611af657634e487b7160e01b600052601160045260246000fd5b5060010190565b6020808252602c908201527f536f6d6147756172643a206163636f756e747320646f6573206e6f742068617660408201526b6520616e792076616c75657360a01b606082015260800190565b8183526000602080850194508260005b85811015611b87578135611b6c81611735565b6001600160a01b031687529582019590820190600101611b59565b509495945050505050565b81835260006001600160fb1b03831115611bab57600080fd5b8260051b80836020870137939093016020019392505050565b604081526000611bd8604083018688611b49565b8281036020840152611684818587611b92565b6000808335601e19843603018112611c0257600080fd5b83018035915067ffffffffffffffff821115611c1d57600080fd5b6020019150600581901b360382131561182c57600080fd5b604080825281018490526000600560608084019087831b85010188845b89811015611cc857868303605f190184528135368c9003601e19018112611c7857600080fd5b8b01602081810191359067ffffffffffffffff821115611c9757600080fd5b81881b3603831315611ca857600080fd5b611cb3868385611b49565b96810196955093909301925050600101611c52565b50508481036020860152611cdd818789611b92565b9998505050505050505050565b60008251611cfc8184602087016116b9565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000812000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
